-
2020-07-12 12:15:28
我在做c primer plus有关于文件练习题的时候,用visual studio时,发现通过程序内获取文件名无法正常打开文件,但是通过命令行参数获取文件名却能正常打开文件,再思考和搜索一番后,找到了问题。因为没搜到类似博客,自己写下一篇,希望能帮助到大家。
1:工程文件和可执行文件不在同一个目录下。用visual studio启动程序,里面输入的文件名(我自己创建的文本文档,是在debug里面创建的)无法在同目录直接找到,所以打开失败。而用命令行参数保证了它们在同一目录下面。
解决办法就是直接去可执行文件所在目录创建文件,这时再打开可执行文件就可以了。
2:fgets会收纳最后一个换行符。我用的是比较新的版本的visual studio,所以不能用gets或者gets_s,所以用了fgets,fgets会接收到后一个换行符为止,所以无法找到同名文件。
解决办法是用一个循环找到fgets输入的字符串中的换行符,并把换行符改成\0,即可。更多相关内容 -
C语言文件打开失败是怎么回事?
2021-05-17 16:49:02//printf("文件打开失败!\n"); exit(1); } fgets(text, MAX, fp); printf("\n\t\t\t%s\n\n", text); for(i=0; i 在判断fp == null的时候直接返回 用 perror()返回No such file or directory 求大佬讲解... -
c语言fopen打开文件失败的原因是什么?
2021-05-20 05:49:41c语言fopen打开文件失败的原因是什么?原因是:程序是以“r”的方式,也就是“读”的方式打开file.txt文件,可是程序都没有指定这个文件...2、程序的源码如下:如果打开文件失败的话,程序会提示“文件打开失败”。...c语言fopen打开文件失败的原因是什么?
原因是:程序是以“r”的方式,也就是“读”的方式打开file.txt文件,可是程序都没有指定这个文件在哪里,程序找不到这个文件,所以就认为打不开。
1、打开集成开发环境Dev-C++,并且新建一个源代码文件:main.c,如下图所示:
在我的电脑上,此源代码放在“D:CCode经验”路径下。
2、程序的源码如下:如果打开文件失败的话,程序会提示“文件打开失败”。
3、 我来编译一下,编译通过,如下图所示:
4、下面再来运行一下,运行结果如下:
从运行结果看,提示了“文件打开失败!”,这是为什么,程序代码没什么问题啊!
5、 其实原因在于,程序是以“r”的方式,也就是“读”的方式打开file.txt文件,可是程序都没有指定这个文件在哪里,程序找不到这个文件,所以就认为打不开。
6、 解决的方法很简单,只要创建file.txt文件,且指定文件的路径就可以了。在“D:CCode经验”路径下新建一个文件file.txt。
7、 再来编译运行 一下,结果如下,输出正常。
推荐教程:《C语言》
-
C / c ++文件打开读取和写入失败的几个常见错误.
2021-05-21 06:59:544. 如果二进制文件打开功能需要| O_BINARY,则fopen需要添加b. 否则,将无法读取该文件.5. 如果将文件USB插入串行端口,请特别注意USB串行端口的不稳定性. 容易读写异常. 建议使用扩展卡到串行端口进行长期操作.////...文件读写失败中的几个常见错误.
1. 文件是否存在
2,文件权限. 该程序会打开非常关闭的文件,并且可能会更改文件权限.
3. 缓冲区大小足以读取文件吗?
4. 如果二进制文件打开功能需要| O_BINARY,则fopen需要添加b. 否则,将无法读取该文件.
5. 如果将文件USB插入串行端口,请特别注意USB串行端口的不稳定性. 容易读写异常. 建议使用扩展卡到串行端口进行长期操作.
//文件操作界面// /// //
int open(const char * path,int access,int模式)
path要打开的文件的路径和名称
访问访问模式fopen失败但生成了文件,宏的定义和含义如下:
O_RDONLY 1个只读打开
O_WRONLY 2只写即可打开
O_RDWR 4读写打开
还可以选择以下模式来匹配以上三种基本模式:
O_CREAT 0x0100创建一个文件并打开它
O_TRUNC 0x0200打开一个现有文件并将文件长度设置为0,保留其他属性
未使用O_EXCL 0x0400
O_APPEND 0x0800其他打开的文件
O_TEXT 0x4000打开文本文件以翻译CR-LF控制字符
O_BINARY0x8000无需CR-LF转换即可打开二进制字符
mode此参数仅在access = O_CREAT模式下使用,其值如下:
S_IFMT 0xF000文件类型掩码
S_IFDIR 0x4000目录
S_IFIFO 0x1000 FIFO专用
仅S_IFCHR 0x2000字符
仅S_IFBLK 0x3000块
S_IFREG 0x8000仅为0x0000
S_IREAD 0x0100可读
S_IWRITE 0x0080可写
S_IEXEC 0x0040可执行文件
FILE * fopen(char *文件名,char * mode)
文件名文件名
模式打开模式:
r以只读模式打开文本文件
rb以只读模式打开二进制文件
w以只读模式打开文本文件
wb以只写模式打开一个二进制文件
一个附件来打开文本文件
ab append打开一个二进制文件
r +以可读可写的方式打开文本文件
rb +以一种可读可写的方式打开一个二进制文件
w +以可读可写的方式创建文本文件
wb +以可读可写的方式生成二进制文件
a +以可读可写的附加模式打开文本文件
ab +以可读可写的方式附加二进制文件
open和fopen之间的区别:
前者是底层IO,后者是高层IO.
前者返回文件描述符,后者返回文件指针.
前者是无缓冲的,后者是缓冲的.
前者与读,写等结合使用. 后者与freadfopen失败但生成了文件,fwrite等结合使用.
后者是在前者的基础上扩展的,在大多数情况下,使用后者.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-256383-1.html
-
C语言fopen打开文件失败了,原来是这个原因~~~~
2020-06-19 11:07:54经常有人问我,我的C语言代码好好的,怎么就打开文件失败了呢? 我们先来看看代码吧 #include <stdio.h> #include <stdlib.h> int main() { FILE* pfRead = fopen("test.txt", "r"); if (pfRead == ...大家好,我是疯狂的比特,一个每天在互联网上种菜和砍柴的程序员
今天给大家分享一个C语言初学者常见的一个问题。问题
经常有人问我,我的C语言代码好好的,怎么就打开文件失败了呢?
我们先来看看代码吧#include <stdio.h> #include <stdlib.h> 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 <stdio.h> #include <stdlib.h> 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
了呢?原来是因为,当我们创建文本文件的时候,电脑自定会给文件带一个后缀是
.txt
,又因为我们的电脑装好系统后,默认是不显示文件的扩展名的,所以你没看到隐藏的.txt文件,这样就导致了以上的情况。你以为你创建了一个
test.txt
的文件,实质上你创建了一个test.txt.txt
的文件!那我们看到这里,把文件名的后缀放展示出来,然后再把文件的名字改正确,那我们的程序就可以正常打开文件,并且读写咯。
知识点
- fopen以读的形式打开文件,文件必须存在,代码中打开的文件名和实际文件名必须要匹配
- perror函数是一个错误报告函数,可以适当的使用
- 我们在使用电脑的时候,最好把文件的扩展名暴露出来,这样就不容易出问题
- 代码出问题是不小心写了错误的代码,不是黄历的问题,要学会解决问题和调试代码的能力,才能成长为优秀的程序员。
全文完
创作不易
如果你觉得文章帮助到了你
欢迎点赞,收藏,评论,文明三连,鼓励作者
我创建了一个粉丝群:1092687209,有什么问题,欢迎交流哦 -
C语言文件的操作.ppt
2021-05-22 03:36:49C语言文件的操作任务1 文件类型指针变量的定义 8.1 文件 文件的分类 在C语言中,文件被看成是由一个一个的字符或字节组成的。根据数据的组织形式,文件可分为文本文件和二进制文件两种。 说明: 8.1.2 文件指针 对... -
C语言fopen打开文件失败
2019-12-04 20:18:27一个单链表创建学生信息的作业,要求要用文件的输入输出。 打全部路径会出现如图的错误。 打“C:\\\student_info.txt”也不行。 把文件移到project8的文件夹下面打“student_info.txt”也不行。 已确定... -
c语言打开文件(c语言文件打开方式代码)
2021-05-20 01:08:581.2 文件的输入输出函数 键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成。而在编程时使用最多的要算 是磁盘文件, 因此.{ printf("File open error\n"); exit(0); } } ... -
C语言文件的打开和关闭
2021-05-21 18:18:08C语言提供了标准库函数用于文件的打开和关闭。1、文件的打开打开文件的操作通过标准库函数 fopen 完成,该函数定义如下:FILE *fopen( const char * filename, const char * mode );函数 fopen 的第二个参数指定了... -
C语言打开文件-C语言打开文件的方式-C语言以只读方式打开文件-C语言以读写方式打开文件-嗨客网
2021-05-19 09:54:40C语言打开文件教程在在 C 语言中,打开文件使用 fopenC语言fopen函数详解语法FILE *fopen(char *filename, char *mode);参数参数描述filename要打开的文件路径。mode要打开的文件的方式。返回值如果打开成功,则返回... -
c语言文件获取失败问题
2020-04-17 18:23:59我的文件获取失败是因为一开始用的只写w操作,只写W是刷新写,创建写,在打开文件时即将之前文件中的内容取消,故而下边的数组没有获取到内容,出现错误。原码如下。 #include <stdio.h> void fun(char str... -
C语言文件处理 -C语言文件的打开和关闭
2021-05-26 01:22:24C语言中,打开文件就是将其从外部存储器调入内存,并定义一个文件指针指向该... //定义文件指针文件指针 = fopen("文件名","文件打开方式"); //打开文件例如,下面代码表示以“只读”方式打开文本文件 f01.txt:FIL... -
c语言文件打开权限
2019-08-27 13:25:42函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 w 打开只写文件,若... -
C语言打开并写入文件
2021-05-20 07:49:01} 该程序使用在mainoutput.txt参数中给定名称的文件打开文件,默认情况下为未提供参数的情况。如果已经存在同名文件,则将其内容丢弃,并将该文件视为新的空文件。如果文件尚不存在,则fopen()调用将创建该文件。 ... -
C语言文件打开模式浅析
2019-04-24 16:25:16在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式 只可以读 只可以写 读写兼备 文本模式 r w ... -
linnux;c语言文件的基础操作;文件打开、关闭、读写。
2022-04-20 19:26:11linnux;c语言文件的基础操作;文件打开、关闭、文件读写。字符读写、字符串读写、格式化读写、二进制读写。结构体写进文件; -
win10打开程序错误状态0xc0000020的两种解决方法
2021-05-20 19:38:40现在,越来越多朋友都开始使用win10系统了,不过偶尔他们也会遇到一些问题。比如,现在一位朋友反馈自己在win10系统中运行程序时遇到了c:\xx\xxx.dll没有被...其实,该问题一般是由于dll未注册或软件存在缺少文件导... -
C语言打开文件详解
2020-02-28 14:10:09C语言中操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还... -
c语言中用什么来打开文件
2021-05-22 02:08:50printf("%6d", aa[i][j]);printf ("\n");}y = fun (aa);...}void NONO (){/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */int i, j, y, k, aa[M][N] ;FILE *rf, *wf ... -
C语言文件的打开和关闭,C语言文件操作
2021-03-07 18:28:20文件代表一系列的字节。函数 fopen()将一个文件和一个流关联起来,并初始化一个类型为 ...每个用于打开文件的函数(也就是 fopen()、freopen()和 tmpfile())都会返回一个指向 FILE 对象的指针,该 FILE 对象包含与被... -
C语言入门教程-打开文本文件
2021-05-20 01:30:51打开文本文件使用fopen可以打开一个文件。fopen以某种指定模式(最常用的三种模式为r、w和a,分别代表读、写和附加)打开文件后,会返回一个文件指针,以后您就用这个文件指针访问这个文件。例如,您要打开一个文件并... -
C语言文件操作
2022-03-02 16:35:32包含了C文件打开关闭方式,文件顺序读写和随机读写操作函数使用, -
Linux中C语言open函数打开或创建文件详细讲解
2021-05-23 06:08:36Linux中C语言open函数打开或创建文件详细讲解Linux中C语言open函数打开或创建文件详细讲解头文件:#include#include#include函数原型:int open( const char * pathname, int flags);int open( const char * pathname... -
c语言 文件
2021-05-24 04:05:29fopen函数会返回NULL(如果要打开的文件不存在),或者该文件 int fclose(FILE *stream); fscanf(FILE*,...); fprintf(FILE*,...); fopen第二个参数 原文:https://www.cnblogs.com/foodie-nils/p/13629136.html -
C语言文件管理之一 文件的打开和写入 fopen函数和打开模式
2022-01-19 08:43:02要操作文件,第一步就是要打开文件,C语言提供了fopen函数来完成这个操作。 1.打开文件fopen函数 来看一些fopen函数的原型: FILE *fopen (const char *filename,const char *modes) 第一个参数插入文件名或者文件... -
c语言文件打开模式
2019-09-03 23:21:11C语言中,文件操作是基本操作,在一般中,但对于文件的打开操作不熟悉,会浪费掉许多时间去发现问题 -
C语言文件操作详解
2022-02-24 21:01:52如果你是一个C语言初学者,那么你一定发现,目前我们的C语言程序只会在执行后自动退出,而不会保存数据及运行结果,那么如何才能保存数据呢?为了保存数据,我们可以用到文件操作。 -
C语言文件处理
2021-10-06 15:35:26fopen:文件打开函数,调用方式: FILE *fp; FILE是一个结构体,fp是指向FILE的指针(结构体指针) fp=fopen(路径加文件名,使用文件的方式);l两个参数都是字符串 “” fp=fopen("a.txt","r");//打开“a.txt”文件...