Błąd "Unable to create file" podczas korzystania z funkcji memo1.lines.savetofile

0

Witam
Mam problem w Lazarusie z użyciem funkcji memo1.lines.savetofile podczas zapisywania zawartości komponentu TMemo do pliku. Wyskakuje błąd: Project raised exception class 'EFCreateError' with message: Unable to create file "C:\plik.txt".
Co ciekawe w przypadku korzystania z funkcji writeln i zastosowania pętli błąd ten nie występuje. W czym jest problem?

Wersja Lazarus: 1.02

kod:


procedure TForm1.Button2Click(Sender: TObject);
var plik: textfile;
 begin
   assignfile(plik,'c:\plik.txt');
  try
    if fileexists('c:\plik.txt')
    then
    begin
    rewrite(plik);
    memo1.lines.savetofile('c:\plik.txt');
    application.messagebox('Zapisano tekst do pliku','Info', MB_OK)
    end
    else
       begin
       rewrite(plik);
       memo1.lines.savetofile('c:\plik.txt');
       application.messagebox('Utworzono plik','Info', MB_OK);
       application.messagebox('Zapisano tekst do pliku','Info', MB_OK)
       end;
  finally
  closefile(plik);
  end;
end;  

2
 if fileexists('c:\plik.txt')
    then
    begin
    rewrite(plik);
    memo1.lines.savetofile('c:\plik.txt');
    application.messagebox('Zapisano tekst do pliku','Info', MB_OK)
    end
    else
       begin
       rewrite(plik);
       memo1.lines.savetofile('c:\plik.txt');
       application.messagebox('Utworzono plik','Info', MB_OK);
       application.messagebox('Zapisano tekst do pliku','Info', MB_OK)
       end;

Piękny przykład!
Jeżeli coś to zrób coś inaczej zrób to samo!

rewrite(plik);
       memo1.lines.savetofile('c:\plik.txt');

Najpierw otwieram plik bez share (rewrite) potem do niego próbuję pisać inną procedurą i dziwię się że plik już jest otwarty i procedura failuje. Genialne.

W czym jest problem?

W tobie, a dokładniej taki jest że najpierw otwierasz plik a potem każesz procedurze otworzyć i pisać do tego pliku - no zobacz że jest otwarty już więc nie możesz go od nowa stworzyć. Wynik? `EFCreateError' with message: Unable to create file "C:\plik.txt"''.

Skoro do savetofile nie musisz przekazywać zmiennej plikowej plik, to po co otwierasz ten plik tak jakbyś chciał do niej to przekazać? Ona sama sobie ten plik stworzy, zapisze i zamknie. Ty jej w tym przeszkadzasz.

0
-321oho napisał(a):
 if fileexists('c:\plik.txt')
    then
    begin
    rewrite(plik);
    memo1.lines.savetofile('c:\plik.txt');
    application.messagebox('Zapisano tekst do pliku','Info', MB_OK)
    end
    else
       begin
       rewrite(plik);
       memo1.lines.savetofile('c:\plik.txt');
       application.messagebox('Utworzono plik','Info', MB_OK);
       application.messagebox('Zapisano tekst do pliku','Info', MB_OK)
       end;

Piękny przykład!
Jeżeli coś to zrób coś inaczej zrób to samo!

rewrite(plik);
       memo1.lines.savetofile('c:\plik.txt');

Najpierw otwieram plik bez share (rewrite) potem do niego próbuję pisać inną procedurą i dziwię się że plik już jest otwarty i procedura failuje. Genialne.

W czym jest problem?

W tobie, a dokładniej taki jest że najpierw otwierasz plik a potem każesz procedurze otworzyć i pisać do tego pliku - no zobacz że jest otwarty już więc nie możesz go od nowa stworzyć. Wynik? `EFCreateError' with message: Unable to create file "C:\plik.txt"''.

Skoro do savetofile nie musisz przekazywać zmiennej plikowej plik, to po co otwierasz ten plik tak jakbyś chciał do niej to przekazać? Ona sama sobie ten plik stworzy, zapisze i zamknie. Ty jej w tym przeszkadzasz.

Dzięki za pomoc, aczkolwiek złośliwości mógłbyś sobie darowac. W końcu dział Newbie jest po to by pomagac laikom, a nie z nich naigrywac. Ale mimo wszystko wielkie dzięki. Temat jest do odfajkowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1