📅  最后修改于: 2023-12-03 14:59:35.746000             🧑  作者: Mango
在C和C++程序中,文件操作时可能会发生各种错误。这些错误包括文件打开失败、读取写入错误或者丢失文件等等。如何正确处理这些错误非常重要,避免程序崩溃或数据丢失。
在C/C++中,调用fopen()函数来打开文件,如果文件不存在,函数将返回NULL指针。在文件打开失败时,应该对返回值进行检查,确定文件是否成功打开。
下面是C语言中的示例代码片段:
FILE *fp;
if((fp = fopen("input.txt", "r")) == NULL){
printf("File opening error\n");
exit(-1);
}
以下是C++中的另一种方式:
fstream file;
file.open("input.txt", ios::in);
if(!file){
cout << "File opening error" << endl;
exit(-1);
}
在以上代码片段中,我们检查了文件是否成功打开,并在文件打开失败时打印出错误信息,并终止程序。
在进行读取或写入文件时,文件读写指针可能到达未知的位置。在读取或写入时发生错误时,会返回一个非零值。为了防止这种情况的发生,可以使用ferror()函数来处理错误。
以下是C语言的示例代码片段:
char buffer[256];
FILE *fp;
fp = fopen("input.txt", "r");
if(fp == NULL){
printf("File opening error\n");
exit(-1);
}else{
while(fgets(buffer, 256, fp) != NULL){
if(ferror(fp)){
perror("Reading error: ");
break;
}
printf("%s", buffer);
}
}
fclose(fp);
以下是C++中的示例代码片段:
char buffer[256];
fstream file;
file.open("input.txt", ios::in);
if(!file){
cout << "File opening error" << endl;
exit(-1);
}else{
while(file.getline(buffer, 256)){
if(file.fail()){
perror("Reading error: ");
break;
}
cout << buffer << endl;
}
}
在以上代码片段中,我们使用方法ferror()或fail()检查读取或写入文件时是否发生错误。如果有错误,我们使用perror()或err()等错误处理函数在控制台输出错误消息并终止程序。
在进行文件操作期间,类似于文件被删除、移动或重命名这类的动作可能会出现,这就会导致程序在运行期间没有找到文件。在这种情况下,我们可以使用文件存在性检查来避免程序崩溃或数据丢失。
以下是C语言的示例代码片段:
FILE *fp;
fp = fopen("input.txt", "r");
if(fp == NULL){
if(errno == ENOENT){
printf("File not found\n");
}else{
printf("Error number: %d\n", errno);
}
exit(-1);
}
fclose(fp);
以下是C++中的示例代码片段:
ifstream file;
file.open("input.txt");
if(file.fail()){
if(errno == ENOENT){
cout << "File not found" << endl;
}else{
cout << "Error number: " << errno << endl;
}
exit(-1);
}
file.close();
在以上代码片段中,我们使用errno变量来检查文件是否存在,并使用同样的方法来避免程序崩溃或数据丢失。
在文件操作期间处理异常是编写高质量、稳定且安全的程序的关键。在本文中,我们讨论了三种可能的异常情况,并提供了示例代码,在应用程序中正确地处理这些异常情况可以确保程序能够正常运行并避免数据丢失或其他难以预测的错误。