c++ Datei auslesen

So hallo erstmal.

Ich muss für die Schule ein Programm schreiben. Unzwar möchte ich den Pfad einer Datei über eine Suchfunktion herausfinden um dann Interpret, Titel, Dauer und einen Tag aus zu lesen. Kennt jemand dafür Funktionen.

Ich fand beim googlen nur struck id3_write gefunden aber damit kam ich leider nicht klar :(.

Mfg Marvin
 
Interpret, Titel, Dauer und einen Tag aus zu lesen.
Ich schließe mal, dass du MP3 Dateien mit ID3 Tags lesen willst
Pfad einer Datei über eine Suchfunktion herausfinden
Was für eine Suchfunktion? Musst du die machen, oder ist die extern?
The ID3 Tag is kept right at the end of the file. It is kept in plain text 127 characters from the end of the file. You should be able to programme that easily. Sorry, I don't know C++ so I can't send any source code.<br>
Das findet man nach kurzem Googlen nach "c++ read mp3 file". Im Allgemeinen ist das englischsprachige Internet wesentlich ergiebiger in Programmierfragen als das Deutsche. Du musst also nur die Länge der Datei bestimmen, den Lesezieger auf Länge - 127 setzten und den lesen.

mfg
bad_alloc
 
Erstmal danke :)

Also schreiben muss ich nichts :P Das ist mehr ein Zusatz zu unseren Programm daher haben ich keine Richtlinien. Das mit den ID3 Tags stimmt schon. Allerdings habe ich anch Deutschen Sachen gegooled.

Die Suchfunktion schreibe ich ebenfalls selbst mit den Functionen FindNextFile und FindFirstFile.

Magst du mir vielleicht trotzdem ncoh sagen wie ich die Datei einbinde ich schreibe dir noch kurz den Quelltext:

struct id3_write
{
char tag[3];//immer TAG
char title[30];
char artist[30];
char album[30];
char year[4];
char komment[28];
char track[2];
char genre[1];
}write_id3;
 
sooo ich bin heut mal ganz sozial und zeig dir, wie ich das mal gemacht hab.. zumindest nen ausschnitt ;)

die struct:
Code:
// MP3ID3V1TAG structure
struct MP3ID3V1TAG
{
	char ident[3]; // TAG
	char title[30];
	char artist[30];
	char album[30];
	char year[4];
	char comment[28];
	BYTE reserved;
	BYTE tracknum;
	BYTE genre;
};

m_strAlbum, usw. sind einfach nur CString-Membervariablen, wo die Tag-Daten abgelegt werden..

der code:

Code:
// read the ID3 tag

		// set up a structure for reading the ID3 version 1 tag
		MP3ID3V1TAG sID3V1;

		if (SetFilePointer(hFile,-128,NULL,FILE_END) != INVALID_SET_FILE_POINTER &&
			ReadFile(hFile,&sID3V1,128,&dwNumBytesRead,NULL) &&
			dwNumBytesRead == 128 && memcmp(sID3V1.ident,"TAG",3) == 0)
		{
			char strTemp[31]; strTemp[30] = 0; // make a temporary null-terminated buffer

			memcpy(strTemp,sID3V1.title,30); m_strTitle = strTemp;
			memcpy(strTemp,sID3V1.artist,30); m_strArtist = strTemp;
			memcpy(strTemp,sID3V1.album,30); m_strAlbum = strTemp;

			strTemp[4] = 0; memcpy(strTemp,sID3V1.year,4); m_strYear = strTemp;

			// now, depending on the reserved byte, the comment is 28 bytes or 30 bytes
			if (sID3V1.reserved)
			{
				// NOTE: even if sID3V1.album is of size 28, the reserved and tracknum
				// are right after, so they'll be included in the comment, which is what
				// we want
				memcpy(strTemp,sID3V1.comment,30); m_strComment = strTemp;
			}
			else
			{
				memcpy(strTemp,sID3V1.comment,28); m_strComment = strTemp;
				m_nTrack = sID3V1.tracknum;
				m_nGenre = sID3V1.genre;
			}

			m_dwValidity |= MP3VLD_ID3V1_VALID;
		}
 
So erstmal Danke :)Ich habe es heute endlich geschafft mich um deine Antwort zu kümmern. Hatte leider viel zu tun. Jetzt habe ich neue Fragen zu deinen Code die ich nicht beantworten konnte.Was genau bewirkt "|=".Wie weiße ich dem Handle eine Musik Datei zu?Was genau muss ich mit dem Struct machen (Einbinden, Aufrufen, Auslesen)Mfg Marvin
 
Wie wärs mit ein wenig Eigeninitiative?

Wenn du nach SetFilePointer( googlen würdest, wüsstest du, dass hFile ein File-Handle ist. Wenn du diesem Link folgst findest du heraus wie du eine Datei öffnest um einen File-Handle zu erstellen: http://msdn.microsoft.com/en-us/library/aa364399(VS.85).aspx

m_dwValidity |= MP3VLD_ID3V1_VALID ist die Kurzform für m_dwValidity = m_dwValidity | MP3VLD_ID3V1_VALID

das bedeutet, dass m_dwValidity true ist wenn entweder m_dwValidity oder MP3VLF_ID3V1_VALID true sind (was du auch selbst mit einer guten C/C++ Referenz hättest herausfinden können...)
 
Zuletzt bearbeitet:
Wie wärs mit ein wenig Eigeninitiative?

Wenn du nach SetFilePointer( googlen würdest, wüsstest du, dass hFile ein File-Handle ist. Wenn du diesem Link folgst findest du heraus wie du eine Datei öffnest um einen File-Handle zu erstellen: http://msdn.microsoft.com/en-us/library/aa364399(VS.85).aspx

m_dwValidity |= MP3VLD_ID3V1_VALID ist die Kurzform fürm_dwValidity = m_dwValidity | MP3VLD_ID3V1_VALID

das bedeutet, dass m_dwValidity true ist wenn entweder m_dwValidity oder MP3VLF_ID3V1_VALID true sind (was du auch selbst mit einer guten C/C++ hättest herausfinden können...)

Ist es nicht ein wenig dreist zu behaupten das ich nichts in eigeninitiative versucht hätte? Der einzige unterschied ist das ich die Borlandhilfe benutzt habe und daher schon wusste, dass es ein Handle ist. Jedoch änderte das nichts daran, dass mir das wissen fehlte einen Handle eine Datei zu zu ordnen.Mfg Marvin
 
Wenn du wirklich denkst, die Definition von Eigeninitiative sei mal kurz in die Borland Hilfe zu schauen und gleich zu fragen wenn du nicht findest was du suchst dann hast du wohl Eigeninitiative bewiesen.

Wie dem auch sei, ob dreist oder nicht, ich hab deine Frage beantwortet anstatt dich mit nem "Google ist dein Freund" abzuspeisen.
 
Wenn du wirklich denkst, die Definition von Eigeninitiative sei mal kurz in die Borland Hilfe zu schauen und gleich zu fragen wenn du nicht findest was du suchst dann hast du wohl Eigeninitiative bewiesen.

Wie dem auch sei, ob dreist oder nicht, ich hab deine Frage beantwortet anstatt dich mit nem "Google ist dein Freund" abzuspeisen.

Dafür hast du auch ein kleines Danke verdient. Allerdings war das mit dem Handle das einzige was ich nicht gegooglet habe.Mfg Marvin
 
Zurück
Oben