Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
8-1096566017
ser_ega
2004-09-30 21:40
2005.01.09
CopyRect


3-1102576526
VadimKV
2004-12-09 10:15
2005.01.09
Откат группы изменений в БД


14-1103313023
Vasya.ru
2004-12-17 22:50
2005.01.09
Пара вопросов к мастерам:


9-1091386709
breakmaster
2004-08-01 22:58
2005.01.09
DXTimer


4-1100873802
VadimEagle
2004-11-19 17:16
2005.01.09
Печать