![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IOResult = 103 [D7, WinXP]
Илья © (2004-12-21 19:46:00)Привет всем.
Я всё таки не могу никак домучать эти файлы.
Проследил дебагером: после открытия файла IOResult = 0, после чтения = 103(файл не был открыт). Где ошибка?
Заранее благодарю.
Вот код:
var
CurFileID : INTEGER;
InFile, OutFile : FILE;
BytesReaden, BytesWritten : INTEGER;
BytesToCopy : INTEGER;
TotalBytesCopied : Int64;
TotalSize : Int64;
Buffer : Pointer;
InFileName, OutFileName : STRING;
begin
//Setting buffer size
BytesToCopy := 10 * 1024 * 1024; //Buffer size = 10 MB
GetMem(Buffer, BytesToCopy);
CurFileID := 0;
while (CurFileID < TotalFiles do
begin
InFileName := FileArray[CurFileId];
OutFileName := IncludeTrailingPathDelimiter(DestDir)+ExtractFileName(InFileName);
if not FileExists(InFileName) then
begin
Inc(CurFileId);
Continue;
end;
//Assign files
AssignFile(InFile, InFileName);
AssignFile(OutFile, OutFileName);
Reset(InFile, 1);
ReWrite(OutFile, 1);
TotalSize := get_FileSize(InFileName);
TotalBytesCopied := 0;
while (TotalBytesCopied < TotalSize) and (not Stopped) do
begin
//До сюда IOResult = 0
BlockRead(InFile, Buffer^, BytesToCopy, BytesReaden);
//Теперь IOResult = 103
if IOResult = 0 then
begin
BlockWrite(OutFile, Buffer^, BytesReaden, BytesWritten);
Inc(TotalBytesCopied, BytesWritten);
end;
end;
CloseFile(InFile);
CloseFile(OutFile);
Inc(CurFileID);
end;
Dispose(Buffer);
end;
Илья (2004-12-24 03:48:00) [1]
> А где у Вас {$I-} ?
После implementation :)
> Это слишком поздно,
> надо и после Reset(InFile, 1);
> и после ReWrite(OutFile, 1);
> и также после BlockRead
> и так далее, но особо первые две
Честно скажу файлами практически не занимался в основоном работал с графикой. Но почему файл будет закрываться после каждой функции? Этого я не понимаю.
Идея программы такова:
Копировать с повреждённых носителей определённые файлы, и заменять несчитываемые байты нулями.
Anatoly Podgoretsky (2004-12-23 00:19:00) [2]И еще вместо обработки IOResult использовать try except
а также перейти на TFileStream
Anatoly Podgoretsky (2004-12-23 00:14:00) [3]Это слишком поздно,
надо и после Reset(InFile, 1);
и после ReWrite(OutFile, 1);
и также после BlockRead
и так далее, но особо первые две
begin...end (2004-12-22 20:49:00) [4]> [3] Илья (22.12.04 20:46)
А где у Вас {$I-} ?
Илья (2004-12-22 20:46:00) [5]
> Кстати задача решается одной строчкой CopyFile
Честно скажу, я знаю!
Уже всё таки пора завязывать с этой программой, а то в моих темах скоро будет больше всего слов CopyFile! :)
Просто у меня есть определённый ран-тайм алгоритм.
> Не видать проверки на открытие файла.
Что - то типа:
if IOResult = 103 then
begin
MessageBox(0, 'Error opening file ' + InFileName, 'Error', MB_OK+MB_ICONSTOP);
Continue;
end;
???
Anatoly Podgoretsky (2004-12-21 20:02:00) [6]Кстати задача решается одной строчкой CopyFile
Anatoly Podgoretsky (2004-12-21 20:01:00) [7]Не видать проверки на открытие файла.