Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Не видать проверки на открытие файла.


Наверх

Титульная страница Поиск, карта сайта Написать письмо