[C++ Builder] zapis do pliku w katalogu innym niż główny

Z góry przepraszam za temat topica, ale nie wiedziałem jak go nazwać…

Otóż kilka tygodni temu napisałem sobie w builderze odtwarzacz plików… (taki bardzo prosty z komponentu MediaPlayer i FilelistBox), teraz postanowiłem do niego dopisać raportowanie. Mianowicie ma tworzyć plik testowy, w którym będzie zapisywał godzinę odtwarzania, ścieżkę do pliku i czas. Wszystko działa, ale tylko wtedy gdy otwarzam pliki, które znajdują się w tym samym katalogu co program, jeżeli zmienię katalog program nie raportuje.

if (FileListBox1->ItemIndex!=-1)

        {

                MediaPlayer1->FileName = FileListBox1->FileName;

                MediaPlayer1->Open();

                MediaPlayer1->Play();


                AnsiString S; AnsiString D;AnsiString F; AnsiString T;

                F= MediaPlayer1->FileName; 

		T=MediaPlayer1->Length;

                D = Date().FormatString("yyyymmdd");

		S=Time();

                ofstream outfile(D.c_str(), ios::app);

                outfile << S.c_str() << "; " << F.c_str() << "; " << T.c_str() << "; " << endl;

                outfile.close();

	}
  1. Zmień temat na jakiś sensowny; “zapis do pliku w katalogu innym niż główny programu” powinno być ok.

  2. Zadbaj o formatowanie kodu PRZED wrzuceniem na forum. To powyżej fatalnie się czyta.

  3. Nazywaj zmienne jakoś sensownie. Za S, D, F i T powinieneś dostać w skórę. :stuck_out_tongue_winking_eye:

  4. Co dokładnie dzieje się z logiem, kiedy odtwarzany plik pochodzi z innego katalogu?

  5. Jakie jest oczekiwane przez Ciebie miejsce, w którym będzie raport? Bo z kodu wynika, że będzie to wciąż katalog programu (a nie pliku).

  6. Dlaczego nie użyjesz debuggera, żeby sprawdzić co się dzieje?

Jeżeli plik mp3 pochodzi z innego katalogu, niż główny programu, po prostu log się nie generuje. Log jest zapisywany w głównym katalogu programu.

Dodane 28.12.2010 (Wt) 22:54

Jednak log się generuje, tyle że w tych katalogach w których znajdują się mp3, jak zrobić by generował się w katalogu w którym znajduje się program??

ofstream outfile((ExtractFilePath(Application->ExeName)+D).c_str(), ios::app);

Pozostaje pytanie: po grzyba któraś z wywoływanych bibliotek (media player jak mniemam) woła SetCurrentDirectory. Bo to jest najpewniej przyczyną zmiany katalogu w którym powstaje log.

Ryan , sam program może być wywołany przez skrót z innym folderem bieżącym niż ten w którym jest program.

Jasne, ale ten program tak najprawdopodobniej nie robi. Wskazuje na to IMO info o tym gdzie się ma pojawiać log, sposób logowania i szczególnie ta linijka:

MediaPlayer1->FileName = FileListBox1->FileName

Plik jest wybierany z UI, zatem najbardziej prawdopodobne, że program uruchamiany jest w katalogu startowym a info o pliku do odtworzenia pochodzi z UI.