我需要创建大的相对较大(1-8 GB)的文件.使用C或C++在Windows上执行此操作的最快方法是什么?我需要动态创建它们,速度确实是一个问题.文件将用于存储仿真,即将在不同的偏移量中随机访问,我需要预先分配所有存储但未初始化,目前我们正在使用虚拟数据写入所有存储,并且花费的时间太长.
谢谢.
当我第一次启用日志记录时,我注意到我的一个项目中出现了巨大的性能损失.但是当达到日志文件限制并且程序再次开始写入文件的开头时,日志记录速度要快得多(大约快50%).将日志文件大小设置为数百MB是正常的.
大多数下载管理器在开始下载文件之前分配具有所需大小的虚拟文件.这使得写入更有效,因为整个块一次分配.
当我的程序第一次启动时,以某种固定大小有效保留磁盘空间的最佳方法是什么?
我正在编写一个应用程序,它通过简单的函数调用接收二进制数据流,例如put(DataBLock, dateTime);每个数据包为4 MB
我必须将这些数据块写成单独的文件,以备将来使用时使用一些额外的数据,如id,插入时间,标签等...
所以我都尝试了这两种方法:
首先FILE:
data.id = seedFileId;
seedFileId++;
std::string fileName = getFileName(data.id);
char *fNameArray = (char*)fileName.c_str();
FILE* pFile;
pFile = fopen(fNameArray,"wb");
fwrite(reinterpret_cast<const char *>(&data.dataTime), 1, sizeof(data.dataTime), pFile);
data.dataInsertionTime = time(0);
fwrite(reinterpret_cast<const char *>(&data.dataInsertionTime), 1, sizeof(data.dataInsertionTime), pFile);
fwrite(reinterpret_cast<const char *>(&data.id), 1, sizeof(long), pFile);
fwrite(reinterpret_cast<const char *>(&data.tag), 1, sizeof(data.tag), pFile);
fwrite(reinterpret_cast<const char *>(&data.data_block[0]), 1, data.data_block.size() * sizeof(int), pFile);
fclose(pFile);
Run Code Online (Sandbox Code Playgroud)
第二个ostream:
ofstream fout;
data.id = seedFileId;
seedFileId++;
std::string fileName = getFileName(data.id);
char *fNameArray = (char*)fileName.c_str(); …Run Code Online (Sandbox Code Playgroud) 我正在制作一个小程序如下:
void reserve_file_space(char* file_path, size_t amount)
{
FILE* fp = fopen(file_path, "w+b");
if(!fp)
{
printf("could not create a new file\n");
return;
}
int fseek_ret = fseek(fp, amount, SEEK_SET);
if(fseek_ret != 0)
{
printf("could not seek to the desired position\n");
fclose(fp);
return;
}
char garbage = 1;
size_t ret = fwrite(&garbage, 1, 1, fp);
if(ret != 1)
{
printf("could not write the garbage character\n");
}
fclose(fp);
}
int main(int argc, char* argv[])
{
reserve_file_space("C:\\Users\\SysPart\\Desktop\\test.bin", 1 << 30);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的 …
我需要创建一些1GB或更高的随机文件(比如100,000).我尝试了打开文件的正常方式,并使用print/syswrite写入它,但它需要超过30分钟.有人可以告诉我任何其他有效的快速方法,我可以在perl中实现它.