Я хочу использовать Writefile для заполнения, а затем конца каждого файла, пока он не достигнет конца своего последнего кластера. Затем я хочу удалить то, что я написал, и повторить процесс (пытаясь избавиться от данных, которые могли быть там).
У меня есть 2 проблемы:
- WriteFile выдает ошибку: ERROR_INVALID_PARAMETER
- В зависимости от типа файла
WriteFile()
дает разные результаты
Итак, для первой проблемы я понял, что параметр nNumberOfBytesToWrite в WriteFile()
должен быть кратным байтам на сектор (в моем случае 512 байт). Это ограничение функции или я что-то не так делаю?
Во втором выпуске я использую два фиктивных файла (.txt и .html) на внешнем жестком диске для записи случайных данных. В случае файла .txt данные записываются в конец файла, что мне и нужно. Однако файл .html просто записывается в начало файла и заменяет все данные, которые уже были там.
Вот несколько фрагментов кода, относящихся к моей проблеме:
hFile = CreateFile(result,
GENERIC_READ | GENERIC_WRITE |FILE_READ_ATTRIBUTES,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
0);
if (hFile == INVALID_HANDLE_VALUE) {
cout << "File does not exist" << endl;
CloseHandle(hFile);
}
DWORD dwBytesWritten;
char * wfileBuff = new char[512];
memset (wfileBuff,'0',512);
returnz = SetFilePointer(hFile, 0,NULL,FILE_END);
if(returnz ==0){
cout<<"Error: "<<GetLastError()<<endl;
};
LockFile(hFile, returnz, 0, 512, 0)
returnz =WriteFile(hFile, wfileBuff, 512, &dwBytesWritten, NULL);
if(returnz ==0){
cout<<"Error: "<<GetLastError()<<endl;
}
UnlockFile(hFile, returnz, 0, 512, 0);
cout<<dwBytesWritten<<endl<<endl;
В настоящее время я использую статические числа только для проверки функций.
Можно ли всегда писать в конец файла независимо от его типа? Я также пробовал SetFilePointer(hFile, 0,(fileSize - slackSpace + 1),FILE_BEGIN);
, но это не сработало.