あなたのint main(int argc, char** argv) {
ブロックで。
if (argc == 3) {
// then there were 3 arguments, the program name, and two parameters
} else if (argc == 2) {
// then prompt for the "second" argument, as the program name and one
// parameter exists
} else {
// just print out the usage, as we have a non-handled number of arguments
}
ここで、ファイルが存在することを確認する場合は、プログラム引数が存在することを確認することとは異なります。基本的にはファイルを開いて読み込もうとしますが、整数のエラーコードをキャッチしてエラーをチェックすることに細心の注意を払ってください。これにより、プログラムが、これらの重要な操作が機能したと想定されるビットに進むのを防ぐことができます。
Cでファイルを処理する場合、新しいプログラマーの間には一般的ですが誤った概念があります。基本的に、特定のコードブロック(この場合はコピーブロック)が機能することを確認したいので、チェック、チェック、およびダブルします。 -ブロックを実行する前に条件を確認してください。ファイルが存在するかどうか、正しいアクセス許可があるかどうか、ディレクトリではないことなどを確認してください。これを行わないことをお勧めします。
コピーブロックは、成功するのと同じように、適切に失敗できる必要があります。失敗した場合は、通常、意味のあるエラーメッセージを出力するために必要なすべての情報があります。最初にチェックしてからアクションを実行する場合、チェックとアクションの間には常に小さな時間差があり、その時間差により、チェックが通過した後、ファイルが読み取られる前に、ファイルが削除または変更されます。このようなシナリオでは、事前チェックコードのすべてがメリットを提供できませんでした。
メリットのないコードは、将来のバグやアーキテクチャ上の問題のネストの場にすぎません。疑わしい(またはまったく)メリットがないコードを書くのに時間を無駄にしないでください。作成したコードにほとんどメリットがないと思われる場合は、コードを再構築して適切な場所に配置する必要があります。他の誰かが書いたコードにはほとんどメリットがないと思われる場合は、まず自分の疑いを疑う必要があります。コードの背後にある動機を理解するのは簡単ですが、新しい言語で始めたばかりの場合はさらにそうです。
幸運を!
---疲れたコード---
#include <errorno.h>
#include <stdio.h>
#include <stdlib.h>
extern int errno;
int main(int argc, char** argv) {
// to hold our file descriptor
FILE *fp;
// reset any possible previously captured errors
errno = 0;
// open the file for reading
fp = fopen(argv[1], "r");
// check for an error condition
if ( fp == 0 && errno != 0 ) {
// print the error condition using the system error messages, with the
// additional message "Error occurred while opening file"
perror("Error occurred while opening file.\n");
// terminate the program with a non-successful status
exit(1);
}
}