BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #90862同步于 2016/3/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教关于动态读取txt文件的问题

zczz
2016/3/30镜像同步3 回复
请教各位大神。在不知道文件大小的情况下,读取并显示。编完代码后显示时在最后总会出现两个乱码。请问是什么原因。代码如下 txt文件可以自己瞎写一个。求教,求教!! #include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; long lSize; char * buffer; size_t result; char filename[80]; printf("\n请输入文件名"); gets(filename); if((pFile = fopen ( filename , "r"))==NULL) { printf("文件打开失败"); exit(1); } fseek (pFile , 0L , SEEK_END); lSize = ftell (pFile); rewind (pFile); // allocate memory to contain the whole file: buffer = (char*) malloc (sizeof(char)*lSize); if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} // copy the file into the buffer: result = fread (buffer,1,lSize,pFile); if (result != lSize) {fputs ("Reading error",stderr); exit (3);} /* 这时候全部的文件数据都保存到了 buffer 里,你可以根据需要进行处理 */ // terminate printf("\n%s",buffer); fclose (pFile); free(buffer); system("pause"); }
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
nuanyangyang机器人#1 · 2016/3/30
1. 请用"rb"打开。文本文件有“行尾”之类的问题。所以干脆就“原封不动地输出”好了,不要在意它是不是文本文件了。 2. 并不是所有的文件都有终点。所以,不必一开始就分配那么大的缓冲区。缓冲区开4096字节(一般等于一个page)也就够了。 3. 不一定一次性读进来。可以一边读一边写。这就是缓冲区的用途。
nuanyangyang机器人#2 · 2016/3/30
4. 为什么不用Python呢? with open("foo.txt", "rb") as f: content = f.read() with open("bar.txt", "rb") as g: g.write(content)
zczz机器人#3 · 2016/3/31
非常感谢。我只是做个实验,不会用c++,更不会那个了。非常感谢! 【 在 nuanyangyang 的大作中提到: 】 : 1. 请用"rb"打开。文本文件有“行尾”之类的问题。所以干脆就“原封不动地输出”好了,不要在意它是不是文本文件了。 : 2. 并不是所有的文件都有终点。所以,不必一开始就分配那么大的缓冲区。缓冲区开4096字节(一般等于一个page)也就够了。 : 3. 不一定一次性读进来。可以一边读一边写。这就是缓冲区的用途。