|
Вопрос # 2 456/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Не могу понять, из-за чего выскакивает ошибка I/O error 6.
Помогите пожалуйста разобраться.
Код в приложении.
Приложение: Переключить в обычный режим-
-
- uses WinInet;
-
- procedure TDownloadThread.Execute;
- var F: File;
- ResumePos,BufferLen,SumSize: DWORD;
- hSession, hURL: HInternet;
- Buffer: array[1..1024] of Byte;
- err: boolean;
- begin
- SumSize:=0; ResumePos:=0;
- AssignFile (F,Path);
- IF FileExists (path) then
- begin
- Reset(f,1);
- ResumePos:=FileSize(F);
- Seek(F, FileSize(F));
- end else ReWrite(f,1);
- NADO:= TRUE;
- hSession:= InternetOpen('X-Kachalka',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
- hURL := InternetOpenURL(hSession,PChar(URLPath),nil,0,0,0);
- InternetQueryDataAvailable(hURL, SumSize,0,0);
- Form1.label5.Caption:= IntToStr (SumSize);
- if ResumePos>0 then
- begin
- InternetSetFilePointer(hURL,ResumePos,nil,0,0);
- end;
- REPEAT
- err:= InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen);
- IF err= false then
- begin
-
- exit;
- end;
-
- Application.Processmessages;
- UNTIL (BufferLen= 0) Or (NADO= FALSE);
-
- end;
 |
Вопрос задал: IlluminatI (статус: 2-ой класс)
Вопрос отправлен: 25 февраля 2009, 22:40
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 26 февраля 2009, 18:15; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 26 февраля 2009, 09:24 [#1]:
Цитата:
Не могу понять, из-за чего выскакивает ошибка I/O error 6.
Правильно сформулированный вопрос = 50% правильного ответа.
В какой строке вылезает ошибка-то? Под дебаггером прогонял?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 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 (статус: 2-ой класс), 26 февраля 2009, 18:08 [#6]:
Path:=Edit2.Text;
Ошибка при первом прохождении цикла, он по логике должен читать файл по 1024, а потом записывать их в файл. (функция, для скачивания файла из интернета).
И еще: эта функция создается в отдельном потоке, может быть, нельзя работать с файлами в потоке? (т.е писать отдельную процедуру и через синхронизацию?)
|
|
IlluminatI (статус: 2-ой класс), 26 февраля 2009, 18:15 [#7]:
да мое предположение было верным
открытие файла вынес за пределы потока, все заработало) спасибо всем.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|