Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизIOResult = 103 Найти похожие ветки
← →
Илья (2004-12-21 19:46) [0]Привет всем.
Я всё таки не могу никак домучать эти файлы.
Проследил дебагером: после открытия файла 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;
← →
Anatoly Podgoretsky © (2004-12-21 20:01) [1]Не видать проверки на открытие файла.
← →
Anatoly Podgoretsky © (2004-12-21 20:02) [2]Кстати задача решается одной строчкой CopyFile
← →
Илья (2004-12-22 20:46) [3]
> Кстати задача решается одной строчкой CopyFile
Честно скажу, я знаю!
Уже всё таки пора завязывать с этой программой, а то в моих темах скоро будет больше всего слов CopyFile! :)
Просто у меня есть определённый ран-тайм алгоритм.
> Не видать проверки на открытие файла.
Что - то типа:
if IOResult = 103 then
begin
MessageBox(0, "Error opening file " + InFileName, "Error", MB_OK+MB_ICONSTOP);
Continue;
end;
???
← →
begin...end © (2004-12-22 20:49) [4]> [3] Илья (22.12.04 20:46)
А где у Вас {$I-} ?
← →
Anatoly Podgoretsky © (2004-12-23 00:14) [5]Это слишком поздно,
надо и после Reset(InFile, 1);
и после ReWrite(OutFile, 1);
и также после BlockRead
и так далее, но особо первые две
← →
Anatoly Podgoretsky © (2004-12-23 00:19) [6]И еще вместо обработки IOResult использовать try except
а также перейти на TFileStream
← →
Илья (2004-12-24 03:48) [7]
> А где у Вас {$I-} ?
После implementation :)
> Это слишком поздно,
> надо и после Reset(InFile, 1);
> и после ReWrite(OutFile, 1);
> и также после BlockRead
> и так далее, но особо первые две
Честно скажу файлами практически не занимался в основоном работал с графикой. Но почему файл будет закрываться после каждой функции? Этого я не понимаю.
Идея программы такова:
Копировать с повреждённых носителей определённые файлы, и заменять несчитываемые байты нулями.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c