C中读文件
来自:http://blogger.org.cn/blog/more.asp?name=binaryluo&id=11408
C文件操作遇到的状况
1.将一个文件读到另一个文件,用“(ch = getc(fp)) != EOF”来判断文件是否结束,如果文件是全英文文本的话绝对没问题,新文件的大小和原文件大小一样;但是如果是一些有中文字符或者是二进制文件,原文件没读完就结束。
2.将一个文件读到另一个文件,用“!feof(fp)”判断文件是否结束,不管原文件是什么类型的都可以将原文件全部读完才结束,但是新文件的大小比原文件多了一个字节。
问题:在C里如何才能正确判断文件结束??
探索
测试一,我写了一个函数来试用EOF判断文件结束的情况:
-------in.txt内容如下---------
abcde
-------in.txt结束-------------
-------test1.c----------------
int main(int argc, char* argv[]){
char ch;
FILE* in;
FILE* out;
in = fopen("in.txt", "rb"); /* in.txt全为英文字符 */
out = fopen("out.txt", "wb");
while ((ch = getc(in)) != EOF){
putc(ch, out);
}
}
运行后结果是:out.txt的大小和in.txt的大小完全一样。
然后修改in.txt如下,在原来的基础上加入一些中文:
-------in.txt修改后的内容如下---------
abcde
这是一个测试文件
测试中文字符
-------in.txt结束--------------------
运行后记过也是大小是一样的。将源程序中的“in = fopen("in.txt", "rb");out = fopen("out.txt", "w");”改为“in = fopen("in.rar", "rb");out = fopen("out.rar", "wb");”,其中,in.rar是一个压缩包文件,大小有4M多,运行程序后,得到的out.rar文件只有800多k,双击解压也出现错误,无法解压。
结论1:在C里,操作文件的时候,如果打开方式是“r”或者“w”,是以文本形式打开,也就是读如内存的字符值都是0-256之间,不可能出现-1,所
相关文档:
Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
&n ......
在讨论全局变量之前我们先要明白几个基本的概念:
1. 编译单元(模块):
在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用g ......
1、C/C++程序员请注意,不能在case语句不为空时“向下执行”。
2、值类型和引用类型之间的区别:C#的基本类型(int,char等)都是值类型,是在栈中创建的。而对象是引用类型,创建于堆中,需要使用关键字new。
3、在C#中通过实例访问静态方法或成员变量是不合法的,会生成编译器错误。但是我们可以通过声明他们 ......
假定经过了若干年的演进, IT技术发展到了这种程度:
1) 联网: 随时随地有无限大的带宽, 用户可以完全免费使用网络, 以及无线网络100%的覆盖率;
2)PC性能:每台电脑都有足够的内存, 足够快的CPU; 在永久存储领域出现革命性技术, 即访问外部存储时间和访问内存时间在同一数量级;
3) B/S开发技术: 大量成熟的we ......
今天项目组发生一个事情就是,后台aix上对多语言文本(英语+汉字)换行问题搞不太清楚。
最早前台的多字符的代码我检查了一下(按照0-128以外算中文的代码)发现不是安全的代码。
(delphi 7.0)
delphi安全的混合字符的操作方法是:
在strsUtils单元中
leftstr
MidStr
Rightstr
aix下是: ......