我有一段代码可以读取文件但文件很小,并将它们分成较小的文件。我想让这段代码读取32 GB或更大的大尺寸文件并支持不同类型的数据类型文件,希望能找到答案帮助吗?
#include <stdio.h>
int main(){
FILE *ptr_readfile;
FILE *ptr_writefile;
char line [128]; /* or some other suitable maximum line size */
char fileoutputname[15];
int filecounter=1, linecounter=1;
ptr_readfile = fopen("editing for the java lab 2.txt","r");
if (!ptr_readfile)
return 1;
sprintf(fileoutputname, "file_part%d", filecounter);
ptr_writefile = fopen(fileoutputname, "w");
while (fgets(line, sizeof line, ptr_readfile)!=NULL) {
if (linecounter == 5) {
fclose(ptr_writefile);
linecounter = 1;
filecounter++;
sprintf(fileoutputname, "file_part%d", filecounter);
ptr_writefile = fopen(fileoutputname, "w");
if (!ptr_writefile)
return 1;
}
fprintf(ptr_writefile,"%s\n", line);
linecounter++;
}
fclose(ptr_readfile);
return 0;
}
答案 0 :(得分:0)
首先,文件类型绝对没有重要性。在C中,您可以直接以二进制形式读取文件。 Windows中的所有内容(文件夹除外,我不确定,也可能有一些例外)都是文件,甚至是可执行文件。
然后,如果你用一个&#34;小&#34;一步一步地阅读它,那么这个尺寸确实不是问题。缓冲区(就像你正在做的那样),没有问题。
所以你可以在每10个缓冲区之后写一个新文件,直到你读到的文件结束。这里没有真正的问题或疑问。
只是一些细节,你的缓冲区大小应该是import cherrypy
cherrypy.config.update({
'server.socket_host': '0.0.0.0',
'server.socket_port': 80,
})
class WebGUI(object):
@cherrypy.expose
def index(self):
return "<!DOCTYPE html><html><title>Test 001</title><body><h1>Welcome to Test 001</h1></body></html>"
@cherrypy.expose
def start(self):
subprocess.Popen(["nohup", "python", "copyfiles.py"])
return "Files copy started ..."
@cherrypy.expose
def status(self):
..............
..............
if __name__ == '__main__':
cherrypy.quickstart(WebGUI())
,用于大文件的表现。 4096应该是最优化的大小,至少使用read()函数,我不知道fget()。
然后您的文件名大小应为4096
。 255是大多数操作系统上的最大文件名大小(256和nullbyte)。