- 当我们所要读取的文件不存在的时候进行自动生成。
- 使用fopen函数
-
1.fopen()
警告
小心!如果使用任何一种"w"模式打开一个已有的文件,文件内容将被删除,以便程序以一个空文件开始操作。
(我发现自己就很傻,在文件的前面进行了文件存在的判定,但是mode写的是rb,导致我在后面的读操作中,每次都是添加写操作之后可以读出内容,但是当我删除写操作(我也查看了目录正是那个文件有内容1kb),再进行都读写的时候发现就没有任何内容输出了 !) fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串 含义 "r" 以只读方式打开文件 "w" 以只写方式打开文件 "a" 以追加方式打开文件 "r+" 以读/写方式打开文件,如无文件出错 "w+" 以读/写方式打开文件,如无文件生成新文件 - 2. 文件的文本模式和二进制模式
-
一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符’\n’,而二进制模式认为它是两个字符 0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。 系统默认的是以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如_fmode=O_TEXT;就设置默认打开方式为文本模式;而_fmode=O_BINARY;则设置默认打开方式是二进制模式。
相对路径下的文件,如果没有fopen里面对应的文件,将自动进行生成。
如果是绝对路径,只有在目录存在的情况下才能正常打开,否则打开失败。
FILE *fp;
if(fp=fopen("123.text","wb")) //相对路径。
puts("文件打开成功!");
else
puts("文件打开失败!");
if(fp=fopen("D:\\程序1\\test.text","wb")) //相对路径。
puts("文件打开成功!");
else
puts("文件打开失败!");
特别需要注意;上述代码中没有假如没文件是否创建的操作,因为我使用的是wb 读写,如果不存在便会自动创建文件。
下面为文件的判断成功打开代码:
/*if((fp=fopen(filename,"w"))==NULL) 无需进行判断,因为若所用文件不存在,则会创建新的文件
{
printf("无法打开此文件\n");
exit(0);
}*/
{
printf("无法打开此文件\n");
exit(0);
}*/
3.文件内容的读写。
//写操作
fp=fopen("123.text","w");
char ch;
ch=getchar();
printf("请输入一个准备存储到磁盘的字符串,以#结束:\n");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
fp=fopen("123.text","w");
char ch;
ch=getchar();
printf("请输入一个准备存储到磁盘的字符串,以#结束:\n");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
//读操作
fp=fopen("123.text","r");
while(!feof(fp))
{
char ch;
ch=fgetc(fp);
putchar(ch);
}
fclose(fp);
while(!feof(fp))
{
char ch;
ch=fgetc(fp);
putchar(ch);
}
fclose(fp);
fopen
http://www.cplusplus.com/reference/clibrary/cstdio/fopen/
fseek
http://www.cplusplus.com/reference/clibrary/cstdio/fseek/
fputs
http://www.cplusplus.com/reference/clibrary/cstdio/fputs/
ftell
http://www.cplusplus.com/reference/clibrary/cstdio/ftell/
http://www.cplusplus.com/reference/clibrary/cstdio/fopen/
fseek
http://www.cplusplus.com/reference/clibrary/cstdio/fseek/
fputs
http://www.cplusplus.com/reference/clibrary/cstdio/fputs/
ftell
http://www.cplusplus.com/reference/clibrary/cstdio/ftell/