主题:关于fopen函数
先贴上《C Primer Plus》一书里的程序:
/* count.c -- 使用标准I/O */
#include <stdio.h>
#include <stdlib.h> //ANSI C的exit()原型
int main(int argc, char* argv[])
{
int ch; // 读取时存储每个字符的位置
FILE *fp; // 文件指针
long count = 0;
if(argc != 2)
{
printf("Usage:%s filename\n", argv[0]);
exit(1);
}
if((fp = fopen(argv[1], "r")) == NULL)
{
puts("这里又是什么意思?");
printf("Can't open %s\n", argv[1]);
exit(1);
}
while((ch = getc(fp)) != EOF)
{
putc(ch, stdout); // 相当于putchar(ch);
count++;
}
fclose(fp);
printf("File %s has %ld characters\n", argv[1], count);
return 0;
}
我用的是Dev-c++编译器,在XP系统下,5.1.2600的命令行版本
在目录下有三个文件,分别是:count.c、count.exe、count.txt
特别说明:count.txt文件是我用来测试自己对于知识的掌握程度而特别建立的。
内容是:Hello World!
在命令行窗口下,我键入count count.txt
屏幕上显示:Hello World! File count.txt has 13 characters
我的问题就是关于fopen函数的模式字符串。
程序中用了的"r"模式,只读取文件。
可是,我在试验别的模式的时候,比如"w"。为啥只是删除了文本文件内的内容,却不让我进行写入操作。"a"或"r+"也不能进行写入操作……
是我根本不懂呢?还是其它的原因?
一开始我以为还要调用什么能写入文件的函数,可转念一想,不对啊,fopen函数能提供这个模式字符串进行写入,那就应该能直接写入文件的,可我不能啊。纠结啊。
还有一个问题。
书里对于fopen函数的模式字符串给出了一个表,写出来是为了能更好的说明问题,表格就不画了。
模式字符串 意义
"r" 读取文本文件。
"w" 写入文本文件,先将文件的长度截为零,如果该文件不存在则先创建之。
"a" 写入文本文件,向已有文件的尾部追加内容,如果该文件不存在则先创建之。
"r+" 更新文本文件,即可以读取和写入。
"w+" 更新文本文件(读取和写入),如果该文件存在则首先将其长度截为零,如果不存在则先创建之。
"a+" 更新文本文件(读取和写入),向已有文件的尾部追加内容,如果该文件不存在则先创建之,可以读取整个文件,但写入时只能追加内容。
"rb", "wb", "ab", "ab+", 与前面的模式相似,只是使用二进制模式而非文本模式打开文件
"a+b", "wb+", "w+b", "ab+"
"a+b"
我的第二个问题就在这里,上面的"ab+"和"a+b"是一样的吗?我自己在测试的时候,没有什么不同,屏幕显示的内容一样,仍然不能进行写入操作……书里给出的表,"ab+"和"a+b"还重复出现了两次……是作者笔误了呢,把其中的一个r写成a,还是确实有其它的用途,唉,郁闷呐。
我在百度上查过,许多人给出的答案又不一样了,说fopen函数的模式字符串可以用6个字符组成
r(read) 读
w(write) 写
a(append) 追加
t(text) 文本模式
b(banary) 二进制模式
+ 读取和写入
如果按这个表,可以用和r, w, a和b, t, +组合或不组合出许多个字符串
+和b的位置是谁先谁后都是无所谓的吗?反正测试"a+b"和"ab+",两者在屏幕上的输出结果是一模一样
我都迷糊了,求高手指点,先谢谢了,感激不尽,感激不尽。貌似每一次我在论坛发贴,都是写好多好长……
/* count.c -- 使用标准I/O */
#include <stdio.h>
#include <stdlib.h> //ANSI C的exit()原型
int main(int argc, char* argv[])
{
int ch; // 读取时存储每个字符的位置
FILE *fp; // 文件指针
long count = 0;
if(argc != 2)
{
printf("Usage:%s filename\n", argv[0]);
exit(1);
}
if((fp = fopen(argv[1], "r")) == NULL)
{
puts("这里又是什么意思?");
printf("Can't open %s\n", argv[1]);
exit(1);
}
while((ch = getc(fp)) != EOF)
{
putc(ch, stdout); // 相当于putchar(ch);
count++;
}
fclose(fp);
printf("File %s has %ld characters\n", argv[1], count);
return 0;
}
我用的是Dev-c++编译器,在XP系统下,5.1.2600的命令行版本
在目录下有三个文件,分别是:count.c、count.exe、count.txt
特别说明:count.txt文件是我用来测试自己对于知识的掌握程度而特别建立的。
内容是:Hello World!
在命令行窗口下,我键入count count.txt
屏幕上显示:Hello World! File count.txt has 13 characters
我的问题就是关于fopen函数的模式字符串。
程序中用了的"r"模式,只读取文件。
可是,我在试验别的模式的时候,比如"w"。为啥只是删除了文本文件内的内容,却不让我进行写入操作。"a"或"r+"也不能进行写入操作……
是我根本不懂呢?还是其它的原因?
一开始我以为还要调用什么能写入文件的函数,可转念一想,不对啊,fopen函数能提供这个模式字符串进行写入,那就应该能直接写入文件的,可我不能啊。纠结啊。
还有一个问题。
书里对于fopen函数的模式字符串给出了一个表,写出来是为了能更好的说明问题,表格就不画了。
模式字符串 意义
"r" 读取文本文件。
"w" 写入文本文件,先将文件的长度截为零,如果该文件不存在则先创建之。
"a" 写入文本文件,向已有文件的尾部追加内容,如果该文件不存在则先创建之。
"r+" 更新文本文件,即可以读取和写入。
"w+" 更新文本文件(读取和写入),如果该文件存在则首先将其长度截为零,如果不存在则先创建之。
"a+" 更新文本文件(读取和写入),向已有文件的尾部追加内容,如果该文件不存在则先创建之,可以读取整个文件,但写入时只能追加内容。
"rb", "wb", "ab", "ab+", 与前面的模式相似,只是使用二进制模式而非文本模式打开文件
"a+b", "wb+", "w+b", "ab+"
"a+b"
我的第二个问题就在这里,上面的"ab+"和"a+b"是一样的吗?我自己在测试的时候,没有什么不同,屏幕显示的内容一样,仍然不能进行写入操作……书里给出的表,"ab+"和"a+b"还重复出现了两次……是作者笔误了呢,把其中的一个r写成a,还是确实有其它的用途,唉,郁闷呐。
我在百度上查过,许多人给出的答案又不一样了,说fopen函数的模式字符串可以用6个字符组成
r(read) 读
w(write) 写
a(append) 追加
t(text) 文本模式
b(banary) 二进制模式
+ 读取和写入
如果按这个表,可以用和r, w, a和b, t, +组合或不组合出许多个字符串
+和b的位置是谁先谁后都是无所谓的吗?反正测试"a+b"和"ab+",两者在屏幕上的输出结果是一模一样
我都迷糊了,求高手指点,先谢谢了,感激不尽,感激不尽。貌似每一次我在论坛发贴,都是写好多好长……