Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.012 c
6-69948
Eraser
2002-02-07 13:08
2002.04.22
О коннекте по сокету


3-69720
anod
2002-03-31 00:27
2002.04.22
Поиск в таблице и русские буквы


1-69783
Pafnuty
2002-04-10 12:23
2002.04.22
Системное время.


14-70008
Феликс
2002-03-16 20:43
2002.04.22
Компоненты?


1-69926
DMA
2002-04-09 20:06
2002.04.22
Как определить какое окно сейчас активное?