Текущий архив: 2002.04.22;
Скачать: CL | DM;
Вниз
как определить- закончена перекачка файла или нет? Найти похожие ветки
← →
Suntechnic © (2002-03-12 18:49) [21]>Юрий Зотов © (12.03.02 16:44)
В Delphi переведёте сами:
Первый проект следит за директорией с:\temp
Код:
DWORD dwWaitStatus;
HANDLE dwChangeHandle;
dwChangeHandle = FindFirstChangeNotification(
"C:\\temp", // directory to watch
FALSE, // do not watch the subtree
FILE_NOTIFY_CHANGE_SIZE);
if (dwChangeHandle == INVALID_HANDLE_VALUE)
ExitProcess(GetLastError());
while (TRUE)
{
// Wait for notification.
dwWaitStatus = WaitForSingleObject( dwChangeHandle, INFINITE);
switch (dwWaitStatus)
{
case WAIT_OBJECT_0:
if ( FindNextChangeNotification( dwChangeHandle) == FALSE )
ExitProcess(GetLastError());
break;
default:
ExitProcess(GetLastError());
}
}
Второй проект манипуляции с файлом:
HANDLE hf = CreateFile("C:\\temp\\bigfile.big", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
SetFilePointer(hf, 1048576, 0, FILE_BEGIN);
SetEndOfFile(hf);// Notification right after this line!!!!! File is still open
CloseHandle(hf);
Как я упоминал ранее мы сначала резервируем место на диске, а копирование будем производить позже. Например сразу после строчкиSetEndOfFile(hf)
мы выполнимSetFilePointer(hf, 0, 0, FILE_BEGIN);
И начнём писать с помощью WriteFile. В итоге: событие получено, файл реально на диск не записан.
Переведите в Delphi расставьте breakpoint-ы и сами посмотрите, что за чем происходит.
Страницы: 1 2 вся ветка
Текущий архив: 2002.04.22;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.022 c