[#1] Odczyt z pliku. Co robie zle? HELP!
Problem jest tego typu. Pisze sobie programik ktory ma za zadanie odczytywac tagi z mp3. Struktura tego taku wyglada tak ze najpierw sa slowa kluczowe np "TPE1" dla wykonawcy (mozna podejrzec plik mp3 edytorem szesnastkowym). Pozniej sa 3 bajty przerwy, 1 bajt okreslajacy dlugosc stringa ktory jest nazwa wykonawcy, pozniej znow 3 bajty przerwy i wykonawca (odstepuja od tego schematu tagi komentarza i URL). Wszystko niby gra. Ale gdy wykonawca ma dlugosc 13 znakow cos sie chrzani. dla innych dlugosci dziala... tu jest czesc z mojego progamu. Ktos ma jakies sugestie??? :(

#include 
#include 
#include 

void main()
{
	char wykonawca[256];
	char id3[4];	
    int ilepobrac;
	int i=0;
	long gdzie;
	FILE *plik;

    if ((plik = fopen("e:\dimmu.mp3", "r")) == NULL)
	{
    	fprintf(stderr, "Nie moge otworzyc pliku.n");
	}

	while((id3[0] != 'T' || id3[1] != 'P') || (id3[2] != 'E' || id3[3] != '1'))
    {
	fseek(plik, 0+i, SEEK_SET);
	fgets(id3, 5, plik);
    i++;
	}

	fseek(plik, 3, SEEK_CUR);

	ilepobrac = fgetc(plik);

	fseek(plik, 3, SEEK_CUR);

	fgets(wykonawca, ilepobrac, plik);

	cout << wykonawca;

    getch();

	fclose(plik);
}



ps. Otwierany plik to przyklad...



Ostatnia modyfikacja: 16.06.06 15:22



Ostatnia modyfikacja: 16.06.06 15:23



Ostatnia modyfikacja: 16.06.06 15:24
[#2] Re: Odczyt z pliku. Co robie zle? HELP!

@Lorak, post #1

Prawdopodobnie w pliku łańcuch tekstowy będący nazwą wykonawcy nie jest zakończony zerem. Więc trzeba to zero na końcu wstawić samemu, bo cout go oczekuje.

A tak przy okazji - zamiast bawić się w oglądanie plików hexedytorem polecam lekturę specyfikacji tagów ID3. Wtedy się np. może okazać, że to nie jest "bajt i 3 bajty przerwy" tylko długie słowo...
[#3] Re: Odczyt z pliku. Co robie zle? HELP!

@Lorak, post #1

if ((plik = fopen("e:\dimmu.mp3", "r")) == NULL)


zdajesz sobie sprawe, ze otwierasz plik do odczytu tekstowego?

while((id3[0] != 'T' || id3[1] != 'P') || (id3[2] != 'E' || id3[3] != '1'))
 {

	fseek(plik, 0+i, SEEK_SET);

	fgets(id3, 5, plik);

    i++;

}

ta pętla jest conajmniej bez sensu, ze nei wspomne o tym, ze moze nigdy sie nie skonczyc...

[#4] Re: Odczyt z pliku. Co robie zle? HELP!

@Kaczus, post #3

zdajesz sobie sprawe, ze otwierasz plik do odczytu tekstowego?

No wlasnie nie Ucze sie programowac dopiero miesiac i chcialem poeksperymentowac z odczytem danych z pliku. Jaki jest inny sposob odczytu?

ta pętla jest conajmniej bez sensu, ze nei wspomne o tym, ze moze nigdy sie nie skonczyc...

Wiem. To byl taki szybki pomysl zeby zatrzymac przesuwanie po znalezieniu odpowiedniego stringa (w tym wypadku "TPE1"). Jakas sugestia?

[#5] Re: Odczyt z pliku. Co robie zle? HELP!

@Lorak, post #4

1) do odczytu binarnego nalezy otworzyc plik w trybie "rb"
2) do odczytu binarnego nie stosuje sie funkcji fgets...

[#6] Re: Odczyt z pliku. Co robie zle? HELP!

@Grzegorz Kraszewski, post #2

Prawdopodobnie w pliku łańcuch tekstowy będący nazwą wykonawcy nie jest zakończony zerem. Więc trzeba to zero na końcu wstawić samemu, bo cout go oczekuje

Tak wlasnie jest. Po skonczeniu lancucha z nazwa wykonawcy zaczyna sie nast. slowo kluczowe (z nazwa tytulu utworu)

A tak przy okazji - zamiast bawić się w oglądanie plików hexedytorem polecam lekturę specyfikacji tagów ID3. Wtedy się np. może okazać, że to nie jest "bajt i 3 bajty przerwy" tylko długie słowo...

Madre pomysly mi podsuwasz Zaraz to obadam. Dzieki.

[#7] Re: Odczyt z pliku. Co robie zle? HELP!

@Kaczus, post #5

Rzeczywiscie. Poszukam czegos jeszcze o odczycie binarnym i troche sie podszkole. Danke schön

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem