Что нового

[Файловая система] Узнать статус свободности файла при пополнении его информацией

SemEMP

Знающий
Сообщения
42
Репутация
7
Хотелось бы узнать как получить статус "свободности" файла. Например узнать до копировался ли файл или нет, чтоб начать с ним дальнейшие манипуляции.

В частном случае имеется сканер и при большом количестве страниц после последней страницы программа сканера скидывает файл на диск причем наблюдается постепенное увеличение файла и если не дождавшись начать что-либо делать с файлом, то файл окажется глючным...

FileOpen c FileRead на это дело ошибкой не реагируют...
 

beliy

Продвинутый
Сообщения
372
Репутация
72
можно проверять размер файла через определенный промежуток времени и сравнивать. Например, как то так (не тестил):
Код:
$sPath = "c:\1.txt"
$sTime = 5000 ; указать время между проверками размера файла

$sCheck1 = FileGetSize($sPath)
Sleep($sTime)
$sCheck2 = FileGetSize($sPath)
While 1
   If $sCheck1 == $sCheck2 Then
	  MsgBox(64, "файл не увеличился", "На протяжении " & $sTime/1000 & " секунд размер файла не менялся" )
	  ExitLoop
   Else
	  $sCheck1 = $sCheck2
	  Sleep($sTime)
	  $sCheck2 = FileGetSize($sPath)
   EndIf
WEnd
 
Автор
S

SemEMP

Знающий
Сообщения
42
Репутация
7
beliy [?]
можно проверять размер файла через определенный промежуток времени и сравнивать. Например, как то так (не тестил): Код: AutoIt [Выделить]$sPath = "c:\1.txt"$sTime = 5000 ; указать время между проверками размера файла$sCheck1 = FileGetSize($sPath)Sleep($sTime)$sCheck2 = FileGetSize($sPath)While 1 If $sCheck1 == $sCheck2 Then MsgBox(64, "файл не увеличился", "На протяжении " & $sTime/1000 & " секунд размер файла не менялся" ) ExitLoop Else $sCheck1 = $sCheck2 Sleep($sTime) $sCheck2 = FileGetSize($sPath) EndIfWEnd

Была такая мысль конечно, но хотелось бы что-нить более быстрое и точное, так как в условиях работы пользователя за компьютером, размер файла может очень туго меняться, а слишком долгий тайм аут делать не выгодно - нужна оперативность.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Если нужно боле оперативно нужно либо, взаимодествовать с утилитой сканирования, вроверяя состояние сканирования. Либо использовать совственную утилиту для сканирования, которая будет работать посредством API (вот ссылка, мб поможет)
 
Автор
S

SemEMP

Знающий
Сообщения
42
Репутация
7
метод с измерением размера не прокатил, так так как в услвиях нагрузки на компьютер сканер очень туго скидывает файл аж таймаут в 30 сек ничего не дает, а при свободном компьютере скидывается за 20-25 сек все... :stars:
попробую методом от beliy [?]
 

Naisho

Знающий
Сообщения
86
Репутация
12
Как идея - определить окончание записи в файл по факту целостности файла - для каждого формата должен быть определенный заголовок и концовка. Либо ждём появления концовки либо по заголовку прикидываем...
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Из winapiex посмотрите функцию _WinAPI_FileInUse()
 
Верх