急求解2个文件读取的有关问题
急,求解2个文件读取的问题1、fwrite()写文件会自动写入文件结束符吗?2、我想fread()读文件(任意文,不知道长
急,求解2个文件读取的问题
1、fwrite()写文件会自动写入文件结束符吗?
2、我想fread()读文件(任意文,不知道长度), 一次读8位,怎么样在读到结尾时不读那个文件结束符?
[解决办法]
fwrite是不会写,但是当关闭文件的时候会自动写入的。文件结束符不是我们程序员写的
fread不读取到结束符怎么知道已经读到程序结束了呢?还有一种方式就是一开始获得文件的长度,然后自己计数,每次读了多少个字节,一直读到文件的长度为止。可以不读结束符了。
[解决办法]
文件结束是由操作系统来给出判定的,一般不是一个符号,而是文件指针超出了文件长度。
[解决办法]
[解决办法]1、fwrite()写文件会自动写入文件结束符吗?
答 文件结束符是-1不用是看不到的 这个会的是也不是fwrite()写的
2、我想fread()读文件(任意文,不知道长度), 一次读8位,怎么样在读到结尾时不读那个文件结束符?
答 !=-1就行了或者!=EOF
[解决办法]windows和linux行为是不一样。
windows里以b打开和不用b打开是不一样的,而在linux里b有没有都一样。
windows以某个特殊字符判别文件文件的结束,所以二进制文件注定不能用fgets之类的读,因为会把某个字节当做结束符。另外,fread读文本形式创建的文件也要小心最后读到不该读的东西,楼上几位是没经历过而已。
[解决办法]不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
推荐使用WinHex软件查看文件或内存中的原始字节内容。