我必须创建一个特定大小的文本文件,用户输入大小。我需要知道的是如何使文件更快。目前创建一个10mb文件大约需要15秒。我必须将此减少到最多5秒。我怎样才能做到这一点?目前这就是我制作文件的方式
void create_file()
{
int size;
cout<<"Enter size of File in MB's : ";
cin>>file_size;
size = 1024*1024*file_size; // 1MB = 1024 * 1024 bytes
ofstream pFILE("my_file.txt", ios::out);
for(int i=0; i<size; i++) //outputting spces to create file
pFILE<<' ';
pFILE.close();
}
更新,这就是我现在使用的,但我也将垃圾值写入文件,
void f_c()
{
int i, size;
cin>>size;
FILE * new_file = fopen("FILE TEST.txt", "w");
char buffer[1024];
memset(buffer,' ', 1024);
for(i = 0; i<1024 * size; i++)
fputs(buffer, new_file);
getchar();
}
答案 0 :(得分:4)
你一次只填一个角色。相反,您可以使用new
分配更大的内存块,然后一次写入更大的块以加快进程。您可以在分配的内存上使用memset
以防止在内存中包含字节字符。但是看看关于重复问题的评论,如果文件最初不需要具有特定内容,则有更快的方法。
答案 1 :(得分:0)
这是一个简单的示例,但没有错误检查。
假设你想要1000的大小:
#include <fstream>
int main () {
int size = 1000;
const char* filename= "file.txt";
std::ofstream fout(filename);
fout.fill (' ');
fout.width (size);
fout << " ";
return 0;
}
答案 2 :(得分:0)
如果你只是想创建一个大文件,那么你不必填写文件中的所有字节,这会让它变慢,只需告诉文件系统你想要多大的文件
在Linux上,使用truncate
truncate("data.txt",1024*1024*1024);
Windows使用SetFilePointer
SetFilePointer (hFile, 1024*1024*1024, NULL, FILE_BEGIN);
他们都可以在不到几秒的时间内创建几千兆字节的未初始化文件。