Как узнать что файл скопировалса до конца???
ПОМОГИТЕ, как узнать что файл скопировалса до конца, с помощю ReadDirectoryChangesW нужен пример...
А проверить размер нового файла если не уверены что копирование получилось не подходит?
Что значит "до конца"? Сравните контрольные суммы, стандартная методика проверки целостности файла.
Файл до конца может никогда и не скопироваться, возможен и такой вариант.
Я проверяю папку на появление новых файлов, если файл создалса начинаю его обрабатывать, но файл начинает обрабатываться еще не скопировавшысь до конца, о входном файле ничего не знаю кроме его формата. Использую ф-ию ReadDirectoryChangesW.
Ну ReadDirectoryChangesW умеет, например, еще и размер проверять. Начинайте обработку, если пришло уведомление о том, что файл с нужным вам именем достиг размера исходного файла.
Цитата: Alexander92
Ну ReadDirectoryChangesW умеет, например, еще и размер проверять. Начинайте обработку, если пришло уведомление о том, что файл с нужным вам именем достиг размера исходного файла.
а можно пример пожалуйста???
Код:
HANDLE hDir = CreateFile(_T("path\\to\\your_directory"), FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, ... /* тут все, как обычно */);
FILE_NOTIFY_INFORMATION pBuffers[1024] = {0};
DWORD dwBytesReturned = 0;
BOOL bStop = FALSE;
while (ReadDirectoryChangesW(hDir, pBuffers, FALSE, FILE_NOTIFY_CHANGE_SIZE, &dwBytesReturned, NULL, NULL)) {
FILE_NOTIFY_INFORMATION *pBuffer = pBuffers;
while (pBuffer) {
if (wcsncmp(pBuffer->FileName, your_file_name, pBuffer->FileNameLength) == 0) {
if (get_file_size_you_must_write_this_function_yourself(your_file_name) == desired_file_size) {
start_processing_your_file();
bStop = TRUE;
}
}
pBuffer += NextEntryOffset;
}
ZeroMemory(pBuffers, sizeof(pBuffers));
if (bStop) break;
}
CloseHandle(hDir);
FILE_NOTIFY_INFORMATION pBuffers[1024] = {0};
DWORD dwBytesReturned = 0;
BOOL bStop = FALSE;
while (ReadDirectoryChangesW(hDir, pBuffers, FALSE, FILE_NOTIFY_CHANGE_SIZE, &dwBytesReturned, NULL, NULL)) {
FILE_NOTIFY_INFORMATION *pBuffer = pBuffers;
while (pBuffer) {
if (wcsncmp(pBuffer->FileName, your_file_name, pBuffer->FileNameLength) == 0) {
if (get_file_size_you_must_write_this_function_yourself(your_file_name) == desired_file_size) {
start_processing_your_file();
bStop = TRUE;
}
}
pBuffer += NextEntryOffset;
}
ZeroMemory(pBuffers, sizeof(pBuffers));
if (bStop) break;
}
CloseHandle(hDir);
Примерно так.