Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.11.2006, 21:49
Аватар для Ross
Ross Ross вне форума
Активный
 
Регистрация: 15.10.2005
Адрес: Казань
Сообщения: 250
Репутация: 30
По умолчанию Ошибка I/o 183

У меня есть ряд параметров, я хочу сохранить их в текстовый файл, при этом использую паскалевкий метод работы с файлами. И эта ошибка (I/O 183) появляется при перезаписи или создании файла при выходе из программы. Я знаю, что эта ошибка означает, что нет доступа к файлу, т.к. он занят, но это не возможно, т.к. его не что не использует, а при запуске приложения этот файл удаляется.
Вот кусочек этого кода:

Код:
if pFist^.Next <> nil then
  begin
    AssignFile(UsersFile, GetCurrentDir + '\fus.fmbp');
    if FileExists(GetCurrentDir + '\fus.fmbp') = true then DeleteFile(GetCurrentDir + '\fus.fmbp');        /// Эту строку я ввел на всякий случай
    Rewrite(UsersFile);          ///////////// Вот здесь и возникает ошибка
    pCurrent := pFist^.Next;
    while pCurrent <> nil do
      begin
Ответить с цитированием
  #2  
Старый 01.11.2006, 22:46
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Набросал нечто подобное, глюков нет. Вот это работает нормально:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  f: file;
begin
   AssignFile( f, GetCurrentDir + '\1.tmp' );
   if FileExists( GetCurrentDir + '\1.tmp' ) then
      DeleteFile( GetCurrentDir + '\1.tmp' );
   Rewrite( f );
   CloseFile( f );
end;
Причина ошибки скорее всего в чем то другом, покажи весь код...
Ответить с цитированием
  #3  
Старый 02.11.2006, 17:03
Аватар для Ross
Ross Ross вне форума
Активный
 
Регистрация: 15.10.2005
Адрес: Казань
Сообщения: 250
Репутация: 30
По умолчанию

Вот например вся процедура:

Код:
procedure SaveUsers;
var
  UsersFile : TextFile;
  Buff : String;
begin
if pFist^.Next <> nil then
  begin
    if FileExists(GetCurrentDir + '\fus.fmp') = true then DeleteFile(GetCurrentDir + '\fus.fmp');
    AssignFile(UsersFile, GetCurrentDir + '\fus.fmp');
    Rewrite(UsersFile);
    pCurrent := pFist^.Next;
    while pCurrent^.Next <> nil do
      begin
        Buff := pCurrent^.Name;               // Name
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.Login;              // Login
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.Pass;               // Pass
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.From;               // From
        WriteLn (UsersFile, Buff);;
        Buff := pCurrent^.SMTPaddres;         // SMTPaddres
        WriteLn (UsersFile, Buff);
        Buff := IntToStr(pTemp^.SMTPport);    // SMTPport
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.SMTPlogin;          // SMTPlogin
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.SMTPemail;          // SMTPemail
        WriteLn (UsersFile, Buff);
        Buff := BoolToStr(pTemp^.SMTPautorisation);   // SMTPautorisation
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.SMTPpass;              // SMTPpass
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.RazbFile;           // RazbFile
        WriteLn (UsersFile, Buff);
        Buff := pCurrent^.SizeParts;          // SizeFile
        WriteLn (UsersFile, Buff);
        Buff := BoolToStr(pCurrent^.yEnc);    // yEnc
        Writeln (UsersFile, Buff);
        Buff := BoolToStr(pCurrent^.Zip);     // ZIP
        Writeln (UsersFile, Buff);
        Buff := BoolToStr(pCurrent^.Chat);    // Chat
        WriteLn (UsersFile, Buff);
        Buff := IntToStr(pCurrent^.ChatHour); // ChatHour
        WriteLn (UsersFile, Buff);
        Buff := IntToStr(pCurrent^.ChatMin);  // ChatMin
        Writeln (UsersFile, Buff);
        pCurrent := pCurrent^.Next;
      end;
    CloseFile (UsersFile);
  end;
end;

Весь прикол в том, что эта процедура стабильно работала, сохраняло всё что необходимо, но когда я добавил в программу возможность Drag & Drop, всё, здесь как отрезало. И подобные процедуры то же отказываются работать. Может я задел какую-нибудь глобальную переменную, фиг знает, у меня знакомый говорить, что это могло быть.

Последний раз редактировалось Ross, 02.11.2006 в 17:06.
Ответить с цитированием
  #4  
Старый 02.11.2006, 18:11
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Цитата:
Сообщение от Ross
Может я задел какую-нибудь глобальную переменную, фиг знает, у меня знакомый говорить, что это могло быть.

Все может быть, т.к. приведенная процедура работает нормально (даже с Drag&Drop).
Ответить с цитированием
  #5  
Старый 11.11.2006, 13:22
Аватар для Ross
Ross Ross вне форума
Активный
 
Регистрация: 15.10.2005
Адрес: Казань
Сообщения: 250
Репутация: 30
Смех

Вопрос закрыт, я переделал всё под WinAPI. Славо богу всё работает. Спасибо Decoding.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter