<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[libid3: Tags in Schleife einlesen und verarbeiten.]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche einen Ordner, der MP3 dateien enthält mit Hilfe der libid3 Bibliothek zu verarbeiten. Die Grundidee ist, dass ersteinmal jeder Titel und Interpret einer Datei erfasst wird:</p>
<pre><code class="language-cpp">void sort(string choose_dir, string music_dir)
{
	ID3_Tag worktag;
	ID3_Frame *frame1;
	DIR *workdir, *musicdir;
	struct dirent *entry;

	string workfile;
	string a=&quot;..&quot;;
	string b=&quot;.&quot;;
	char artist[1024], title[1024];

	workdir = opendir(choose_dir.c_str());
	musicdir = opendir(music_dir.c_str());

	do
	{

		entry = readdir(workdir);

		if(entry &amp;&amp; entry-&gt;d_name != a &amp;&amp; entry-&gt;d_name != b)
		{
			string mp3, part1;
			part1=entry-&gt;d_name;
			mp3=choose_dir+part1;

			worktag.Link(mp3.c_str());

			frame1=worktag.Find(ID3FID_TITLE);
			frame1-&gt;Field ( ID3FN_TEXT ).Get ( artist, 1024 );

			string path;
			path=&quot;/home/serbud/test/&quot;+part1;
			rename(mp3.c_str(),path.c_str());
			cout &lt;&lt; artist&lt;&lt;endl;
			//cout &lt;&lt; entry-&gt;d_name&lt;&lt;endl;

		}
	}while(entry);
	closedir(workdir);
}
</code></pre>
<p>Jedoch passiert bei Aufruf folgendes: (wobei wir annehmen dass 'track1' der tatsächliche Titel eines Stückes ist und alle anderen Stücke andere Titel haben.)</p>
<pre><code>Track 1
Track 1
Track 1
Track 1
Track 1
Track 4
Track 1
Track 1
Track 1
</code></pre>
<p>...und so weiter. Ich verzweifle noch, weiß nicht weshlab dies der Fall ist. Lasse ich die Dateinamen (nicht den Tag Inhalt!) nacheinander ausgeben, treten keine Probleme auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256393/libid3-tags-in-schleife-einlesen-und-verarbeiten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 08:06:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256393.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Dec 2009 23:18:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to libid3: Tags in Schleife einlesen und verarbeiten. on Fri, 11 Dec 2009 23:18:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche einen Ordner, der MP3 dateien enthält mit Hilfe der libid3 Bibliothek zu verarbeiten. Die Grundidee ist, dass ersteinmal jeder Titel und Interpret einer Datei erfasst wird:</p>
<pre><code class="language-cpp">void sort(string choose_dir, string music_dir)
{
	ID3_Tag worktag;
	ID3_Frame *frame1;
	DIR *workdir, *musicdir;
	struct dirent *entry;

	string workfile;
	string a=&quot;..&quot;;
	string b=&quot;.&quot;;
	char artist[1024], title[1024];

	workdir = opendir(choose_dir.c_str());
	musicdir = opendir(music_dir.c_str());

	do
	{

		entry = readdir(workdir);

		if(entry &amp;&amp; entry-&gt;d_name != a &amp;&amp; entry-&gt;d_name != b)
		{
			string mp3, part1;
			part1=entry-&gt;d_name;
			mp3=choose_dir+part1;

			worktag.Link(mp3.c_str());

			frame1=worktag.Find(ID3FID_TITLE);
			frame1-&gt;Field ( ID3FN_TEXT ).Get ( artist, 1024 );

			string path;
			path=&quot;/home/serbud/test/&quot;+part1;
			rename(mp3.c_str(),path.c_str());
			cout &lt;&lt; artist&lt;&lt;endl;
			//cout &lt;&lt; entry-&gt;d_name&lt;&lt;endl;

		}
	}while(entry);
	closedir(workdir);
}
</code></pre>
<p>Jedoch passiert bei Aufruf folgendes: (wobei wir annehmen dass 'track1' der tatsächliche Titel eines Stückes ist und alle anderen Stücke andere Titel haben.)</p>
<pre><code>Track 1
Track 1
Track 1
Track 1
Track 1
Track 4
Track 1
Track 1
Track 1
</code></pre>
<p>...und so weiter. Ich verzweifle noch, weiß nicht weshlab dies der Fall ist. Lasse ich die Dateinamen (nicht den Tag Inhalt!) nacheinander ausgeben, treten keine Probleme auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821431</guid><dc:creator><![CDATA[serbud]]></dc:creator><pubDate>Fri, 11 Dec 2009 23:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to libid3: Tags in Schleife einlesen und verarbeiten. on Sat, 12 Dec 2009 04:35:08 GMT]]></title><description><![CDATA[<p>Keine Ahnung, das offensichtlichste wäre natürlich, dass die alle den gleichen Tag haben. Als Buffer für den Titel verwendest du aus unerklärlichen Gründen ja auch die Variable &quot;artist&quot;. Ich weiß nicht wie libid3 funktioniert, aber auffällig ist der Link()-Aufruf am ID3-Tag Objekt in Zeile 30. Eventuell erlaubt es die Library ein solches Objekt nur einmal zu &quot;linken&quot; (was auch immer das heißen mag). Versuch mal die Definition von &quot;worktag&quot; in die Schleife zu verlagern, der Compiler sorgt dann dafür, dass sich die Variable in jedem Schleifendurchlauf &quot;wie frisch deklariert&quot; verhält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821469</guid><dc:creator><![CDATA[szanni]]></dc:creator><pubDate>Sat, 12 Dec 2009 04:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to libid3: Tags in Schleife einlesen und verarbeiten. on Sat, 12 Dec 2009 10:05:25 GMT]]></title><description><![CDATA[<p>Ich versuche zur Zeit auch diese Library zu verwenden, bin aber beim Benutzen weniger erfolgreich als du.<br />
Ich bekomme noch lauter Linking-Fehler. Aber ich hab mir die Dokumentation schonmal angekuckt und hab da noch iwas mit Clear() im Kopf; habs auch mal rausgesucht:</p>
<p><a href="http://id3lib.sourceforge.net/api/class_i_d3___tag.html#a3" rel="nofollow">http://id3lib.sourceforge.net/api/class_i_d3___tag.html#a3</a></p>
<p><em>Edit:Rechtschreibung</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821490</guid><dc:creator><![CDATA[halo]]></dc:creator><pubDate>Sat, 12 Dec 2009 10:05:25 GMT</pubDate></item><item><title><![CDATA[Reply to libid3: Tags in Schleife einlesen und verarbeiten. on Sat, 12 Dec 2009 19:36:02 GMT]]></title><description><![CDATA[<p>*Seufz*</p>
<p>Vielen herzlichen Dank, daran lag's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821691</guid><dc:creator><![CDATA[serbud]]></dc:creator><pubDate>Sat, 12 Dec 2009 19:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to libid3: Tags in Schleife einlesen und verarbeiten. on Sun, 13 Dec 2009 12:37:04 GMT]]></title><description><![CDATA[<p>Und siehe da: Der gleiche Fehler erneut:</p>
<pre><code class="language-cpp">do
	{
		worktag.Clear();
		entry =readdir(sortdir);
		if(entry)
		{
			string next = entry-&gt;d_name;

			if (next.find(&quot;mp3&quot;) != string::npos)
			{
				char artist[1024], title[1024];
				string nextfile = usersortdir+next;

				worktag.Link(nextfile.c_str());

				frame1 = worktag.Find(ID3FID_TITLE);
				frame1-&gt;Field ( ID3FN_TEXT ).Get ( artist, 1024 );

				cout &lt;&lt;artist&lt;&lt;endl;
			}
		}	
	}while(entry);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821926</guid><dc:creator><![CDATA[serbud]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to libid3: Tags in Schleife einlesen und verarbeiten. on Sun, 13 Dec 2009 19:17:08 GMT]]></title><description><![CDATA[<p>Ich habe bei mir jetzt erstmal hinbekommen die Lib richtig einzubinden, falls ich in den nächsten Tagen auf ähnliche Probleme stoße meld ich mich nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822099</guid><dc:creator><![CDATA[halo]]></dc:creator><pubDate>Sun, 13 Dec 2009 19:17:08 GMT</pubDate></item></channel></rss>