Что нового

[Файловая система] Определить конец файла при чтении из него

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Ситуация вроде простая, но не могу понять как определить конец файла при чтении из него , используя функцию
Код:
_WinAPI_ReadFile

вот в таком случае
Код:
While 1
$readfile = _WinAPI_ReadFile()
; условие выхода из цикла - достигнут конец файла
WEnd

как понимаю, нужно использовать
Код:
_WinAPI_SetFilePointer

но как корректно это сделать сообразить не могу :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
возьми маленький файл, читай из него в цикле (бесконечном) принтуй все - прочитанное значение, значение функции, @error и @extended. когда получишь конец файла, что-то да должно измениться.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
понятно.
на официальном форуме нашел схожую тему, только с готовыми функциями.
если кому интересно http://www.autoitscript.com/forum/topic/116880-largefilecopy-udf/page__hl__%20_winapi_readfile




Добавлено:
Сообщение автоматически объединено:

вобщем выдрал :smile: часть кода из ссылки, которую я давал выше. получилось вот что
Код:
#include <winapi.au3>

$file_source = _WinAPI_CreateFile('путь', 2, 2)
$file_dest = _WinAPI_CreateFile('путь', 3, 4)

Local $iRead, $iWritten,$bytesRead = 0, $iToRead = 4096, $tBuffer = DllStructCreate('byte[4096]'), $iSize = _WinAPI_GetFileSizeEx($file_source)

While $bytesRead < $iSize
	If $iToRead > ($iSize - $bytesRead) Then $iToRead = $iSize - $bytesRead
	If Not _WinAPI_ReadFile($file_source, DllStructGetPtr($tBuffer), $iToRead, $iRead) Or ($iToRead <> $iRead) Then
		ExitLoop
	EndIf
	If Not _WinAPI_WriteFile($file_dest, DllStructGetPtr($tBuffer), $iRead, $iWritten) Or ($iRead <> $iWritten) Then
		ExitLoop
	EndIf
	$bytesRead += $iToRead
WEnd
_WinAPI_CloseHandle($file_source)
_WinAPI_CloseHandle($file_dest)
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
damien2008
я тоже так делаю :smile: http://autoit-script.ru/index.php/topic,13191.0.html
но чтение и запись функциями API чуть разнится с функциями AutoIT по отслеживанию ошибок. если
Код:
FileOpen
отслеживает момент когда файл закончился и высылает -1, то
Код:
_WinAPI_ReadFile
так не делает :smile:
 
Верх