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код:

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;
}

А вот код записи 128MBFile:

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 и этой проблемы нет.

0

Решение

Попробуйте вместо этого использовать freeBytesTotal.

0

Другие решения

Извините, ребята, Ганс Пассант был прав, это была очень простая ошибка. Код перезаписывал файлы одинаковыми по размеру, поэтому свободное пространство никогда не менялось.

Для справки, и freeBytesUser, и freeBytesTotal дают одинаковые результаты. Это было сделано на Windows 7 64 бит.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector