OpenPictureDialog + zapis do pliku = invalid FileName

0

Witam, mam problem z programem mianowicie piszę program który po wypełnieniu pól, i wczytaniu ścieżki do obrazka zapisze te informacje razem ze ścieżką do pliku txt, problem polega na tym ze wywala błąd Invalid FileName, natomiast błedu nie ma gdy nie uzyje fuknkcji OpenPictureDialog który włąsnie zwraca mi scieżkę do zmiennej src,

oto kod

procedure TForm2.Button1Click(Sender: TObject);

begin
OpenPictureDialog1.FileName:='';
if
OpenPictureDialog1.Execute
then
Edit4.Text := OpenPictureDialog1.FileName
else
showmessage('Wcisnieto Anuluj');

end;

procedure TForm2.Button3Click(Sender: TObject);
begin
Form2.Close();
end;

procedure TForm2.Button2Click(Sender: TObject);
var ptytul   : string;
    otytul   : string;
    gatunek1 : string;
    gatunek2 : string;
    gatunek3 : string;
    gatunek  : string;
    dlfilmu  : string;
    opis     : string;
    src      : string;
    TF       : TextFile;
    plik     : string;
begin
ptytul := Edit1.Text;
otytul := Edit2.Text;
gatunek1 := ComboBox1.Text;
gatunek2 := ComboBox2.Text;
gatunek3 := ComboBox3.Text;
dlfilmu := Edit3.Text;
opis := Memo1.Text;
src := Edit4.Text;

// zalozenia gatunkow
if gatunek1<>'' then
gatunek:=gatunek1;
if gatunek2<>'' then
gatunek:=gatunek2;
if gatunek3<>'' then
gatunek:=gatunek3;
if (gatunek1<>'') and (gatunek2<>'') then
gatunek:=gatunek1+', '+gatunek2;
if (gatunek2<>'') and (gatunek3<>'') then
gatunek:=gatunek2+', '+gatunek3;
if (gatunek1<>'') and (gatunek3<>'') then
gatunek:=gatunek1+', '+gatunek3;
if (gatunek1<>'') and (gatunek2<>'') and (gatunek3<>'') then
gatunek:=gatunek1+', '+gatunek2+', '+gatunek3;
if (gatunek1='') and (gatunek2='') and (gatunek3='') then
gatunek:='Nie wybrano zadego gatunku';


if (ptytul='') or (otytul='') or (gatunek='') or (dlfilmu='') or (opis='') then
showmessage('ERROR! Film nie zostal dodany, poniewaz nie wypelniono wszystkich informacji')
else
begin
plik:='zbior\1122.txt';

if Not FileExists(plik) Then // Sprawdzenie, czy plik istnieje
  Begin
AssignFile(TF,plik);
    ReWrite(TF);
    Writeln(TF,ptytul);
    Writeln(TF,otytul);
    Writeln(TF,gatunek);
    Writeln(TF,dlfilmu);
    Writeln(TF,opis);
    Writeln(TF,src);
  End Else
  Begin
  AssignFile(TF,plik);
    Reset(TF); // jeżeli tak - otwórz do odczytu
    Writeln(TF,ptytul);
    Writeln(TF,otytul);
    Writeln(TF,gatunek);
    Writeln(TF,dlfilmu);
    Writeln(TF,opis);
    Writeln(TF,src);
  End;
  CloseFile(TF);
end;

end;

Gdzie robię błąd ?

0

Próbowałeś podać pełną ścieżkę?
Próbowałeś debugować kod ?
W której linijce występuje błąd ?

0

Po odpaleniu i wcisnieciu butona odpowiedzialnego za stworzenie pliku txt, podświetla się linijka

ReWrite(TF);

ale gdy nie urywam funkcji OpenPictureDialog i zmienna src zostaje pusta to całość się ładnie zapisuje i nie wywala błędu

0
Kamyk napisał(a)

ale gdy nie urywam funkcji OpenPictureDialog i zmienna src zostaje pusta to całość się ładnie zapisuje i nie wywala błędu

Zmienna src nie ma żadnego wpływu na zapis do pliku.
Błąd musi być jakiś inny.
Jeżeli otwierasz plik tekstowy za pomocą Reset to jest on otwarty tylko do odczytu.
Do zapisu otwiera się za pomocą Rewrite (stara wersja pliku zostanie nadpisana) albo Append.

0

Kamyk: proponuje używać do zapisu i odczytu typu TStringList (więcej informacji w google oraz helpie IDE), wcześniej dodając pola przez Add - będzie Tobie łatwiej, a zapis możesz robić w bloku try... zaś w except - uzyskać komunikat o ewentualnym blędzie.

0

olesio ale wole zapisywać to do txt bo każdy film w tej bazie będzie miał osobny plik, który później będzie odczytywany. Poza tym nie bardzo wiem jak użyć ten TStringList

0

no to Google: TStringList delphi i jazda :) Najkrótszy i lakoniczny opis jest na http://pl.wikibooks.org/wiki/Delphi/TStringList - dodam tylko, że zapis to oczywiście SaveToFile. A TStringList to jak nazwa wskazuje taka lista stringów, gdzie każda linijka tekstu to osobny wiersz tego obiektu. Będzie Tobie na pewno łatwiej jak zajrzysz jeszcze do tego, do pomocy Delphi. TStringList poza tym może przechowywać też w trakcie działania programu obiekty w każdym wierszu, do tego sortowanie, własne sortowanie, czy wyłaczenie dodadawania duplikatów. To może się Tobie też później przydać.

0

**Olesio **dziękuje :) teraz ładnie śmiga :)

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