大家好,我是疯狂的比特,一个每天在互联网上种菜和砍柴的程序员 今天给大家分享一个C语言初学者常见的一个问题。
问题经常有人问我,我的C语言代码好好的,怎么就打开文件失败了呢? 我们先来看看代码吧
#include #include int main(){FILE* pfRead = fopen("test.txt", "r");if (pfRead == NULL){printf("打开文件test.txt失败啦\n");exit(1);}//读写文件//to do//关闭文件fclose(pfRead);pfRead = NULL;return 0;}因为这里fopen打开文件的方式是"r",所以我们要保证文件存在! 那这里我们首先创建一个test.txt这样名字的文件在工程的目录下。 比如: 然后我们运行程序 请看结果:
这是为什么呢? 明明文件存在,代码也没问题! 明明文件存在,代码也没问题! 明明文件存在,代码也没问题! 怎么结果就是错了呢? 一定是今天写代码没看黄历…
好了,这是突然想起来,C语言还有一个报告错误信息的函数perror哦~
void perror ( const char * str );参考文档 这个函数可以在库函数发生错误的情况下,报告当前库函数使用发生错误的原因。
这里既然我们发现fopen函数打开文件失败了,就可以在fopen函数后报告一下错误的原因是什么,接下来改代码如下:
#include #include int main(){FILE* pfRead = fopen("test.txt", "r");if (pfRead == NULL){//改变:这里并没有直接打印,而是换成了perror函数报告错误perror("打开文件test.txt失败啦");exit(1);}//读写文件//to do//关闭文件fclose(pfRead);pfRead = NULL;return 0;}请看结果: 程序给出的结果,让我们清醒认识到其实代码错误和黄历是没有关系的,这里和能力有关系。
当看到:"No such file or directory"这句话错误提示的时候,我们才开始怀疑,难道是真的文件不存在????难道是真的文件不存在????难道是真的文件不存在????
到这里你可能还是一筹莫展,不知如何下手? 那我就接下来揭晓答案!!!!
这个时候,我们看看创建文件的地方: 那如何显示文件的后缀呢? 如果你是win10系统,请看这里:
当我们显示文件扩展名的时候,刚刚我们创建的test.txt这个文件的名字为什么是test.txt.txt了呢?
原来是因为,当我们创建文