Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2012, 11:52   #1
Yurchik
 
Регистрация: 10.05.2012
Сообщений: 6
Вопрос IO error 32, при загрузке файла с сервера

Всем доброго времени суток!

Столкнулся с небольшой проблемкой, не пойму в чем дело. Ниже код проги которая висит в процессах и по интервалу скачивает через функцию GetInetFile файл с сервера, функция работает в других приложениях, а когда запускаю это то на строке Rewrite(f,1) вылетает IO error 32. Подскажите пожалуйста что не так?

Код:
program Project1;

uses
  wininet, windows, Messages, sysutils, forms;

const FileOnNet='www*';
const LocalFileName='C:\WINDOWS\file.txt';

var msg : TMsg;
      t : Text;
      s : String;

function GetInetFile(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
  
   sAppName := ExtractFileName(Application.ExeName);
   hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
         nil, nil, 0);
   try
      hURL := InternetOpenURL(hSession,
      PChar(fileURL),nil,0,0,0);
      try
         AssignFile(f, FileName);
         Rewrite(f,1);
         repeat
            InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
            BlockWrite(f, Buffer, BufferLen)
         until BufferLen = 0;
         CloseFile(f);
         Result:=True;
      finally
      InternetCloseHandle(hURL)
      end
   finally
   InternetCloseHandle(hSession)
   end
end;

begin
  while GetMessage(msg, HInstance, 0, 0) do
    begin
      TranslateMessage(msg);
      DispatchMessage(msg);
      sleep(20000);
      if GetInetFile(FileOnNet,LocalFileName)=true then
        begin
          AssignFile(t,'C:\WINDOWS\file.txt');
          {$I-}
          Reset(t);
          {$I+}
          if IOResult=0  then
            begin
              ReadLn(t,s);
              if s='1459' then
              showmessage('sadf');
            end;

    end;
  end;


end.
Yurchik вне форума Ответить с цитированием
Старый 10.05.2012, 11:59   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> не пойму в чем дело

походу не закрыт хендл файла в главном теле программы
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 10.05.2012, 13:12   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Скорее всего Ваш файл занят чем то. Или нет доступа писать в этот файл.
FaTaL вне форума Ответить с цитированием
Старый 10.05.2012, 22:45   #4
Yurchik
 
Регистрация: 10.05.2012
Сообщений: 6
По умолчанию

Я тоже так подумал, но я не профи, и не знаю что такое хэндл, может кто-нибудь подскажет как исправить?
Yurchik вне форума Ответить с цитированием
Старый 11.05.2012, 08:30   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Ты передаёшь в функцию для скачки const FileOnNet='www*';
И что за файл он должен качать с такого адреса?
И второе, может у тебя нет прав писать этот файл с инета сюда LocalFileName='C:\WINDOWS\file.txt' ;?
FaTaL вне форума Ответить с цитированием
Старый 11.05.2012, 14:25   #6
Yurchik
 
Регистрация: 10.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Ты передаёшь в функцию для скачки const FileOnNet='www*';
И что за файл он должен качать с такого адреса?
Это просто здесь я написал, в коде нормальный адрес.

Цитата:
Сообщение от FaTaL Посмотреть сообщение
И второе, может у тебя нет прав писать этот файл с инета сюда LocalFileName='C:\WINDOWS\file.txt' ;?
Файл нормально скачивается, и данные в нем на месте. Но ошибка вылетает.
Yurchik вне форума Ответить с цитированием
Старый 11.05.2012, 15:10   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Скинь бинарник, у себя попробую запустить.
FaTaL вне форума Ответить с цитированием
Старый 11.05.2012, 17:49   #8
Yurchik
 
Регистрация: 10.05.2012
Сообщений: 6
По умолчанию

Вроде разобрался, трабла была в том что в теле программы файл открывался но не закрывался, и соответственно в функции GetInetFile возникала ошибка доступа, т.к. файл был открыт. Добавил строку CloseFile(t) и все. Спасибо.
Yurchik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При загрузке страницы из сервера программа иногда очень долго пытается ее получить Tolias C# (си шарп) 3 27.02.2012 00:58
Ошибка при загрузке XML файла Alter Общие вопросы Delphi 4 25.09.2011 13:58
Подмена exel файла при загрузке со страницы Алексей131 JavaScript, Ajax 3 27.06.2010 14:20
Проблема при загрузке файла XML в TreeView artemavd Общие вопросы Delphi 1 20.06.2010 15:39
Ошибка при загрузке файла html Ign Microsoft Office Excel 1 11.11.2007 13:55