在你的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);
}
}