Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 456

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Не могу понять, из-за чего выскакивает ошибка I/O error 6.
Помогите пожалуйста разобраться.
Код в приложении.

Приложение:
  1.  
  2.  
  3. uses WinInet;
  4.  
  5. procedure TDownloadThread.Execute;
  6. var F: File;
  7. ResumePos,BufferLen,SumSize: DWORD;
  8. hSession, hURL: HInternet;
  9. Buffer: array[1..1024] of Byte;
  10. err: boolean;
  11. begin
  12. SumSize:=0; ResumePos:=0;
  13. AssignFile (F,Path);
  14. IF FileExists (path) then
  15. begin
  16. Reset(f,1);
  17. ResumePos:=FileSize(F);
  18. Seek(F, FileSize(F));
  19. end else ReWrite(f,1);
  20. NADO:= TRUE;
  21. hSession:= InternetOpen('X-Kachalka',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
  22. hURL := InternetOpenURL(hSession,PChar(URLPath),nil,0,0,0);
  23. InternetQueryDataAvailable(hURL, SumSize,0,0);
  24. Form1.label5.Caption:= IntToStr (SumSize);
  25. if ResumePos>0 then
  26. begin
  27. InternetSetFilePointer(hURL,ResumePos,nil,0,0);
  28. end;
  29. REPEAT
  30. err:= InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen);
  31. IF err= false then
  32. begin
  33.  
  34. exit;
  35. end;
  36.  
  37. Application.Processmessages;
  38. UNTIL (BufferLen= 0) Or (NADO= FALSE);
  39.  
  40. end;


IlluminatI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: IlluminatI (статус: 2-ой класс)
Вопрос отправлен: 25 февраля 2009, 22:40
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 26 февраля 2009, 18:15; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 26 февраля 2009, 09:24 [#1]:

Цитата:


Не могу понять, из-за чего выскакивает ошибка I/O error 6.


Правильно сформулированный вопрос = 50% правильного ответа.
В какой строке вылезает ошибка-то? Под дебаггером прогонял?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 26 февраля 2009, 14:03 [#2]:

я же написал в коде коментарий, на какой строке ошибка вылезает.
строка:

BlockWrite(f, Buffer, BufferLen); //вот тут ошибка
Вадим К

Вадим К (статус: Академик), 26 февраля 2009, 14:24 [#3]:

Да вот проблема в том, что непонятно, что такое 6 ошибка. я знаю такие
 n:=IOResult;
   if n<>0 then
   begin
     writeln('Error encountered in reading file ',s);
     case n of
        2: writeln('File not found');
        3: writeln('Path not found');
        4: writeln('Too many open files');
        5: writeln('File access denied');
      100: writeln('Disk read error');
      101: writeln('Disk write error');
      150: writeln('Disk is write protected');
      152: writeln('Drive is not ready');
      154: writeln('CRC error in data');
      156: writeln('Disk seek error');
      157: writeln('Unknown media type');
      162: writeln('Hardware failure');
      else writeln('Various error');
     end;
     halt;
   end;
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 26 февраля 2009, 15:12 [#4]:

Пардон, не заметил.
А ошибка возникает при первом проходе цикла или нет?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Паровоз

Паровоз (статус: 10-ый класс), 26 февраля 2009, 17:57 [#5]:

"непонятно, что такое 6 ошибка"
{ The handle is invalid. }
ERROR_INVALID_HANDLE = 6;

Проверьте, чему равен Path.
IlluminatI

IlluminatI (статус: 2-ой класс), 26 февраля 2009, 18:08 [#6]:

Path:=Edit2.Text;

Ошибка при первом прохождении цикла, он по логике должен читать файл по 1024, а потом записывать их в файл. (функция, для скачивания файла из интернета).

И еще: эта функция создается в отдельном потоке, может быть, нельзя работать с файлами в потоке? (т.е писать отдельную процедуру и через синхронизацию?)
IlluminatI

IlluminatI (статус: 2-ой класс), 26 февраля 2009, 18:15 [#7]:

да мое предположение было верным :)
открытие файла вынес за пределы потока, все заработало) спасибо всем.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 5 апреля 2020, 07:18
Выполнено за 0.02 сек.
Рейтинг@Mail.ru