Řešim problém jak udělat aby při pokusu o uložení souboru proběhla kontrola zda již soubor neexistuje nebo není-li otevřen... Podle helpu jsem to sesmolil takto:
Kód:
procedure TForm1.UlozClick(Sender: TObject);
var JmenoSouboru:string;
index1,index2:byte;
Tabulka:TextFile;
begin
If SaveDialog1.Execute then
begin
JmenoSouboru:=SaveDialog1.FileName;
If FileExists(SaveDialog1.FileName) then
begin
If (FileOpen(SaveDialog1.FileName, fmOpenWrite or fmShareDenyNone )>0) then
begin
If (MessageDlg('Soubor již existuje, přepsat?',mtConfirmation, [mbYes, mbNo],0))=mrYes then
begin
index1:=1;
index2:=2;
AssignFile(Tabulka,SaveDialog1.FileName);
ReWrite(Tabulka);
ZapisDoSouboru(Tabulka,index1);
WriteLn(Tabulka);
WriteLn(Tabulka);
ZapisDoSouboru(Tabulka,index2);
CloseFile(Tabulka);
end
else
begin
MessageDlg('Soubor neuložen',mtInformation, [mbOk],0);
end;
end
else
begin
MessageDlg('Soubor je otevřen, zavřete jej nebo změnte název ukládaného souboru a opakujte akci',mtInformation, [mbOk],0);
end;
end
else
begin
index1:=1;
index2:=2;
AssignFile(Tabulka,SaveDialog1.FileName);
ReWrite(Tabulka);
ZapisDoSouboru(Tabulka,index1);
WriteLn(Tabulka);
WriteLn(Tabulka);
ZapisDoSouboru(Tabulka,index2);
CloseFile(Tabulka);
end;
end;
end;
Funguje to až na to, že když soubor existuje a chci ho přepsat tak to spadne na radku s ReWrite(Tabulka); a hodi to hlasku:
Kód:
Project Project1.exe raised exception class EInOutError with message 'I/O error 32'. Process stopped. Use Step or Run to continue.
Mám tedy ten soubor před uložením smazat? To by ho ale ReWrite měl přepsat sám ne?