|
#1
|
||||
|
||||
Ошибка 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
|
||||
|
||||
Набросал нечто подобное, глюков нет. Вот это работает нормально:
Код:
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
|
||||
|
||||
Вот например вся процедура:
Код:
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
|
||||
|
||||
Цитата:
Все может быть, т.к. приведенная процедура работает нормально (даже с Drag&Drop). |
#5
|
||||
|
||||
Вопрос закрыт, я переделал всё под WinAPI. Славо богу всё работает. Спасибо Decoding.
|