CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Playlista na listview zapis/odczyt z pliku.
Strona 1 z 3

Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 12:37
przez Peter_M
Witam. Nawiązując do tematu o kontrolce List view: http://programowanie.cal.pl/cyfbar/listview.html chciałem zbudować playlistę do odtwarzacza multimedialnego(kilka tematów o nim poruszałem) w oparciu o tę kontrolkę. Wiem, że można by zbudować na listboxie, ale listbox nie posiada kolumn tylko wszystko dodaje jak leci. Chciałbym również na listview zrobić tzw drag and drop żeby z np z pulpitu przeciągać pliki na playlistę.
W jaki sposób mogę zapisać do pliku/odczytać z pliku elementy playlisty w oparciu o kontrolkę Listview? Próbowałem coś samemu wymodzić, ale nic mi nie przyszło do głowy. Jest na to jakiś w miarę prosty sposób?

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 20:30
przez polymorphism
Pętli próbowałeś użyć? :)

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 21:07
przez Peter_M
Próbowałem, ale Poddałem się.
:cry:

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 21:52
przez polymorphism
To jak, piszesz player, a wykładasz się na tak banalnej sprawie?

Lecisz w pętli po kolei wszystkie elementy listy i zapisujesz je do pliku. W czym dokładnie problem?

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 22:18
przez Peter_M
polymorphism napisał(a):To jak, piszesz player, a wykładasz się na tak banalnej sprawie?
Dla doświadczonych Programistów być może jest to banalne, ale dla początkujących już być może nie.
polymorphism napisał(a):Lecisz w pętli po kolei wszystkie elementy listy i zapisujesz je do pliku. W czym dokładnie problem?

A no w tym problem, że nie chce zapisać więcej niż jeden element.

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 22:48
przez polymorphism
Pokaż kod.

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: piątek, 13 grudnia 2019, 23:25
przez Peter_M
Kodu nie mam, Ponieważ pustego pliku zamieszczał nie będę. Chciałbym żeby plik wynikowy zawierał ścieżki dostępu do plików. Czy w ten sposób można stworzyć, PlayListę, aby zapisywała ścieżki do plików?

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: sobota, 14 grudnia 2019, 01:03
przez polymorphism
Chodziło mi o kod, który jest wynikiem twoich prób. Twierdzisz, że nie udaje Ci się zapisać więcej niż jeden element, dlatego chciałbym zobaczyć, co tam napisałeś, że nie zapisuje całej listy.

Czy w ten sposób można stworzyć

Można.

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: sobota, 14 grudnia 2019, 14:18
przez Peter_M
Tak wiem. Próbowałem łączyć kod z porady o zapisywaniu i ładowaniu subitems pętlą for ale kompilator zwracał błędy kompilacji. Próbowałem coś poszukać na własną rękę. Ale znajdowałem praktycznie przykłady użycia na kod Delphi dla c++ buildera same ogólniki. Dlatego też postanowiłem założyć temat, bo może wspólnie coś wymodzimy. Niby prosta rzecz, a jednak powoduje u mnie załamanie się. :(

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: sobota, 14 grudnia 2019, 15:31
przez polymorphism
Dobra, inaczej.
Chcesz zapisać zawartość listview, tak? Co jest nie tak w zapisywaniu (np. przy użyciu std::ofstream) element po elemencie do pliku? Gdzie jest konkretnie problem (pokaż przykładowy kod)?

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: środa, 18 grudnia 2019, 14:09
przez Peter_M
polymorphism napisał(a):Dobra, inaczej.
Chcesz zapisać zawartość listview, tak?
Nie, Chcę zapisać, ścieżki do plików, które są umieszczone na Komponencie ListView, przykładowo na komponencie ListView jest Test.mp3 dodany do kolumny drugiej, Test1.mp3 zapisany jest w kolumnie 3 itd. Chcąc zapisać taką playlistę, w pliku wynikowym ma być coś takiego:
Kod: Zaznacz cały
Test\Test.mp3
Test1\Test1.mp3
Test2\Test2.mp3 . itd, itd.

polymorphism napisał(a): Co jest nie tak w zapisywaniu (np. przy użyciu std::ofstream) element po elemencie do pliku? Gdzie jest konkretnie problem (pokaż przykładowy kod)?

Funkcja OfStream zapisuje sam element, a nie ścieżkę dostępu. Jak wspomniałem chcę zapisać ścieżkę dostępu do plików.
swoją drogą, przepraszam za opóźnienie choroba.

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: środa, 18 grudnia 2019, 15:38
przez polymorphism
przykładowo na komponencie ListView jest Test.mp3 dodany do kolumny drugiej, Test1.mp3 zapisany jest w kolumnie 3 itd.

Nie pomyliłeś kolumn z wierszami?

Jak wspomniałem chcę zapisać ścieżkę dostępu do plików.

Jeśli w listview nie ma pełnych ścieżek, to nie zapiszesz ich do pliku. Chyba że dodasz jeszcze jedną kolumnę, np. Path, w której będą pełne ścieżki do plików mp3. No i wtedy z górki.

Inna opcja, bardziej pr0, to listview działający w trybie virtual, wtedy całą playlistę trzymasz w wektorze (wraz ze ścieżkami). Poczytaj o właściwości TListView::OwnerData.

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: środa, 18 grudnia 2019, 19:53
przez lukagrom
Jeśli kolumny i wiersze to może lepiej StringGrid
Nie wiem czy dobrze zrozumiałem, ale od biedy można zastosować taki zapis:
KOD cpp:     UKRYJ  
 AnsiString a,b,c,result_Mus;
 FILE *music_F1;
 StringGrid1->Cells[0][0]="Polish hits";
 StringGrid1->Cells[1][0]="Shazza";
 StringGrid1->Cells[2][0]="Bierz_co_chcesz.mp3";
 AnsiString name_File="My_music.txt";
 AnsiString sep="/";
 a=StringGrid1->Cells[0][0];
 b=StringGrid1->Cells[1][0];
 c=StringGrid1->Cells[2][0];
 result_Mus=a+sep+b+sep+c;
 music_F1=fopen(name_File.c_str(),"wt");
 fprintf(music_F1,"%s",result_Mus.c_str());
 fclose(music_F1);

 

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: środa, 18 grudnia 2019, 20:18
przez polymorphism
Jeśli kolumny i wiersze to może lepiej StringGrid

Przecież w listview też są kolumny.

Co te funkcje z C tam robią? Masz std::ofstream i std::ifstream.

Re: Playlista na listview zapis/odczyt z pliku.

Nowy postNapisane: środa, 18 grudnia 2019, 21:31
przez lukagrom
Naturalnie mój błąd ze złych przyzwyczajeń, oczywiście powinno być:
KOD cpp:     UKRYJ  
ofstream music_F1;
 music_F1.open(name_File.c_str());
 music_F1<<result_Mus.c_str();
 music_F1.close();
 


A na stackoverflow znalazłem funkcję do ścieżki dostępu:
Quick and nice solution is to use this function to remove chars from string:

KOD cpp:     UKRYJ  
void removeCharsFromString( string &str, char* charsToRemove ) {
   for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) {
      str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
   }
}

string myAbsolutepath; //fill with your absolute path
removeCharsFromString( myAbsolutepath, "\"" );