【发布时间】:2014-10-13 21:31:19
【问题描述】:
我正在尝试编写一个程序来用文件填充硬盘驱动器。这是为了测试驱动器的可靠性。我写了一个文件,读取它以检查其内容,然后继续前进,直到驱动器已满。
但是当你在循环中调用它时,我用来获取驱动器可用空间的函数返回相同的值。我到处寻找,但找不到这个问题的答案。
我写了一个简单的程序来展示这个现象。
int main()
{
for (int i = 0; i < 3; ++i)
{
write128MBFile("F:\\test\\fill\\" + to_string(i));
cout << getFreeSpace("F:\\test\\fill") << endl;
}
}
返回
1 //Meaning that GetDiskFreeSpaceEx was successful
229311180800 //The amount of free bytes left
1
229311180800
1
229311180800
我确认文件已被写入。磁盘的可用空间甚至可以在驱动器的属性菜单中正确更新。
这是getFreeSpace的代码:
static unsigned __int64 getFreeSpace(const char* dir)
{
ULARGE_INTEGER freeBytesUser;
ULARGE_INTEGER bytes;
ULARGE_INTEGER freeBytesTotal;
int i = GetDiskFreeSpaceEx(dir,&freeBytesUser,&bytes,&freeBytesTotal);
cout << i << endl;
return freeBytesUser.QuadPart;
}
这里是write128MBFile的代码:
void write128MBFile(string fileName)
{
int fileSize = 1024*1024*128;
int parts = 8;
int partSize = fileSize / parts;//Buffer of about 16MB
char c = 33;
ofstream outfile;
outfile.open(fileName, ios::binary | ios::trunc);
for (int i = 0; i < parts; i++)
{
char *partToWrite = new char[partSize + 1];
partToWrite[partSize] = '\0';
for (int j = 0; j < partSize; j++)
{
partToWrite[j] = c;
}
outfile << partToWrite;
outfile.flush();
delete partToWrite;
}
outfile.close();
}
不能忘记包含:
#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
using namespace std;
我没有正确使用该功能吗?我完全不知道是什么原因造成的。 我用 c# 写了类似的东西,它使用 DriveInfo 类,这个问题不存在。
【问题讨论】:
-
奇怪,你的卷有用户配额吗?
-
你应该在开始之前删除目录的内容:)