Я пытаюсь написать программу для заполнения жесткого диска файлами. Это испытание надежности привода. Я пишу файл, читаю его, чтобы проверить его содержимое и двигаться дальше, пока диск не будет заполнен.GetDiskFreeSpaceEx, свободное пространство не меняется, несмотря на создание файлов
Но функция, которую я использую для получения свободного пространства диска, возвращает то же значение, когда вы вызываете его в цикле. Я везде искал, но не мог найти ответа на этот вопрос.
Я написал простую программу, чтобы показать явление.
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
«S:
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;
Am Я не использую функция правильно? Я совершенно не знаю, что может быть причиной этого. У меня что-то подобное написано в C#, оно использует класс DriveInfo, и этой проблемы нет.
Это странно, у вас есть пользовательские квоты для вашего тома? –
Возможный дубликат: http://stackoverflow.com/questions/627131/getdiskfreespaceex-reports-wrong-number-of-free-bytes – Ilya
Вы должны удалить содержимое каталога перед началом работы :) –