<?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[Kopiervorgang mit mehr als 1 Ziel]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich soll ein kleines Tool schreiben, das 1 Quell-Laufwerk auf 3 Ziel-Laufwerke kopiert.</p>
<p>Also quasi die Dateien auf Laufwerk F: ausliest und dann gleichzeitig auf die Laufwerke G:, H: und I: kopiert.<br />
(nicht binär sondern nur die Dateien)</p>
<p>Ich bräuchte mal einen Ansatz wie man sowas am besten macht und ein paar grundsätzliche Ideen, da man mit Windows Boardmitteln ja immer nur von A nach B kopiert aber man nirgends mehr als 1 Ziel angeben kann.</p>
<p>Das Tool soll nicht 3 Kopiervorgänge hintereinander starten, sondern eben gleichzeitig auf alle 3 Ziele kopieren.</p>
<p>Geschrieben werden soll das ganze in C++ 6.0, allerdings bin ich so ein mittelprächtiger C++ Noob... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Thx.</p>
<p>mfg<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197931/kopiervorgang-mit-mehr-als-1-ziel</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 02:12:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197931.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Nov 2007 08:33:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Fri, 16 Nov 2007 08:33:39 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich soll ein kleines Tool schreiben, das 1 Quell-Laufwerk auf 3 Ziel-Laufwerke kopiert.</p>
<p>Also quasi die Dateien auf Laufwerk F: ausliest und dann gleichzeitig auf die Laufwerke G:, H: und I: kopiert.<br />
(nicht binär sondern nur die Dateien)</p>
<p>Ich bräuchte mal einen Ansatz wie man sowas am besten macht und ein paar grundsätzliche Ideen, da man mit Windows Boardmitteln ja immer nur von A nach B kopiert aber man nirgends mehr als 1 Ziel angeben kann.</p>
<p>Das Tool soll nicht 3 Kopiervorgänge hintereinander starten, sondern eben gleichzeitig auf alle 3 Ziele kopieren.</p>
<p>Geschrieben werden soll das ganze in C++ 6.0, allerdings bin ich so ein mittelprächtiger C++ Noob... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Thx.</p>
<p>mfg<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404113</guid><dc:creator><![CDATA[trequ]]></dc:creator><pubDate>Fri, 16 Nov 2007 08:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Fri, 16 Nov 2007 08:44:54 GMT]]></title><description><![CDATA[<p>Mir fällt auf Anhieb kein Befehl ein, der in mehrere Ziele kopiert, da bleibt dir wohl nichts anderes übrig, als nacheinander in alle Ziele zu kopieren.</p>
<p>wenn du mit internen Mitteln kopieren willst (Quelle einlesen und in Zieldatei schreiben), kannst du auch nur die Ausgabe-Befehle duplizieren:</p>
<pre><code class="language-cpp">//Pseudocode
ifstream fin(quelle);
ofstream fout1(ziel1),fout2(ziel2);
string zeile;
while(getline(quelle,zeile))
{
  fout1&lt;&lt;zeile&lt;&lt;endl;
  fout2&lt;&lt;zeile&lt;&lt;endl;
}
</code></pre>
<p>(wobei - such mal nach &quot;aufsplitten&quot; im Forum, da findest du einen Ansatz, das zu automatisieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404119</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 16 Nov 2007 08:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Fri, 16 Nov 2007 08:56:07 GMT]]></title><description><![CDATA[<p>Also ich glaube nicht, dass man das irgendwie über ein Fremdprogramm wie xcopy machen kann, daher wird man es wohl mit C++ Mitteln machen müssen.</p>
<p>Der Code sieht schon mal recht intressant aus, aber wenn ich das als Nicht-C++-Freak richtig verstehe, kopiert das jetzt nur 1 bestimmte Datei.</p>
<p>Ich möchte ja alle Dateien auf dem Datenträger in allen Unterverzeichnissen kopieren.<br />
Soll man das dann in eine Schleife schalten die systematisch durch den ganzen Verzeichnissbaum geht, oder wie?</p>
<p>Und wie komme ich zu einer Fortschittsanzeige?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404122</guid><dc:creator><![CDATA[trequ]]></dc:creator><pubDate>Fri, 16 Nov 2007 08:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Fri, 16 Nov 2007 08:58:25 GMT]]></title><description><![CDATA[<p>Ja, das mußt du in einer Schleife für jede Datei einzeln machen. (btw, auf WinAPI kannst du auch SHFileOperation() ausprobieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404125</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 16 Nov 2007 08:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Fri, 16 Nov 2007 10:15:53 GMT]]></title><description><![CDATA[<p>Es ist mögich gleichzeitig aus einer Datei zu lesen.<br />
Du erstellst 3 Thread welche das kopieren übernehmen.<br />
Hier gibt es dann eben viele Ansätze.<br />
Jeder Thread öffnet die Datei und schreibst sie auf sein Laufwerk oder ein 4. Öffnet sie und übergibt den Inhalt an die Threads zum schreiben.<br />
U.S:W.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404195</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Fri, 16 Nov 2007 10:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Thu, 22 Nov 2007 15:17:31 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich nochmal, ich habe das ganze jetzt mal umgesetzt und ich denke es wird so weit auch funktionieren, nur finde ich irgendwie einen Fehler in dieser Funktion nicht.</p>
<p>Das Problem ist recht einfach beschrieben:<br />
Es wird komplett die ganze Ordnerstruktur und alles erzeugt, allerdings nur 1 Datei pro Ordner mit Inhalt, alle andern sind 0KB groß.<br />
Ich weiß nur nicht warum?</p>
<p>Beispiel:<br />
\datei1.txt - 100KB<br />
\datei2.txt - 200KB<br />
\Ordner 1\datei3.txt - 300KB<br />
\Ordner 1\datei4.txt - 400KB<br />
\Ordner 2\datei5.txt - 500KB<br />
\Ordner 2\datei6.txt - 600KB</p>
<p>Die erste Datei die das Programm öffnet und kopieren will funktioniert, bei der 2ten geht die MessageBox auf &quot;Datei kann nicht geöffnet werden&quot; aber es steht nix in GetLastError() (Siehe Zeile 60 im Code).<br />
Da ist anscheinend nur einfach NULL was GetLastError zurück liefert.<br />
Dann sieht das Ziellaufwerk wie folgt aus:</p>
<p>\datei1.txt - 100KB<br />
\datei2.txt - 0KB<br />
\Ordner 1\datei3.txt - 300KB<br />
\Ordner 1\datei4.txt - 0KB<br />
\Ordner 2\datei5.txt - 500KB<br />
\Ordner 2\datei6.txt - 0KB</p>
<p>Wie gesagt, ich bin kein C++ Crack, warscheilich ist es total simpel und ich sehs nur nicht.</p>
<p>Ich bin mir auch mit data[1] nicht so sicher, aber wenn ichs größer mach, wird die Zieldatei länger als die Quelldatei.</p>
<pre><code class="language-cpp">int CTestanwendungDlg::CopyFiles(CString drive, int count_copy, int count){
	CFileFind	finder; 
	BOOL		bWorking;
	ifstream	source_file1;
	ofstream	target_file1,
				target_file2,
				target_file3;
	CString		source_path1,
				target_path1,
				target_path2,
				target_path3;

	drive += _T(&quot;\\*.*&quot;); 

	bWorking = finder.FindFile(drive); 

	while (bWorking &amp;&amp; !cancelflag){ 
		bWorking = finder.FindNextFile(); 

		if (finder.IsDots()) continue; 

		if (finder.IsDirectory()){
			// Dies ist ein Directory
				CString str = finder.GetFilePath();

			// Erstelle Ordner
				target_path1 = target1 + finder.GetFilePath().Right(finder.GetFilePath().GetLength() - 3);
				target_path2 = target2 + finder.GetFilePath().Right(finder.GetFilePath().GetLength() - 3);
				target_path3 = target3 + finder.GetFilePath().Right(finder.GetFilePath().GetLength() - 3);

				if(copy_to_target1){
					CreateDirectory(target_path1, NULL);
				}
				if(copy_to_target2){
					CreateDirectory(target_path2, NULL);
				}
				if(copy_to_target3){
					CreateDirectory(target_path3, NULL);
				}

			// Kopiere Dateien dieses Ordners
				count_copy = CopyFiles(str, count_copy, count); 

		}
		else{
			// Dies ist eine Datei
				count_copy++;
				m_progress_ctrl.SetPos(count_copy);
				output.Format(&quot;Kopiere Datei %d von %d: %s&quot;, count_copy, count, finder.GetFilePath());
				m_status_ctrl.SendMessage(WM_SETTEXT, 0, (LPARAM)(LPCTSTR)output);

				source_path1 = finder.GetFilePath();
				target_path1 = target1 + finder.GetFilePath().Right(finder.GetFilePath().GetLength() - 3);
				target_path2 = target2 + finder.GetFilePath().Right(finder.GetFilePath().GetLength() - 3);
				target_path3 = target3 + finder.GetFilePath().Right(finder.GetFilePath().GetLength() - 3);

				source_file1.open(source_path1, ios::in | ios::binary);
				MessageBox(&quot;Öffne Datei &quot;+ source_path1);
				if(!source_file1){
					MessageBox (&quot;Fehler beim öffnen der Datei.&quot; + GetLastError());
				}

				if(copy_to_target1){
					target_file1.open(target_path1, ios::out | ios::binary);
				}
				if(copy_to_target2){
					target_file2.open(target_path2, ios::out | ios::binary);
				}
				if(copy_to_target3){
					target_file3.open(target_path3, ios::out | ios::binary);
				}

				char data[1];

				while(source_file1.read((char *) data, sizeof(data))){

					if(copy_to_target1){
						target_file1.write((char *) data, sizeof(data));
					}
					if(copy_to_target2){
						target_file2.write((char *) data, sizeof(data));
					}
					if(copy_to_target3){
						target_file3.write((char *) data, sizeof(data));
					}
				}

				target_file1.clear();
				target_file1.close();
				target_file2.close();
				target_file3.close();
				source_file1.close();
		}
	} 

	finder.Close(); 
	return count_copy;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1408245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408245</guid><dc:creator><![CDATA[trequ]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Thu, 22 Nov 2007 15:31:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">MessageBox (&quot;Fehler beim öffnen der Datei.&quot; + GetLastError());
</code></pre>
<p>Das funktioniert so nicht, denn GetLastError() liefert ein DWORD zurück und keinen CString oder const char *. Da geht die Stringkonkatenation natürlich in die Hose. Schau Dir mal CString::FormaT() an. Der nach Korrektur angezeigte Fehlercode sollte Dir dann hoffentlich weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408251</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:31:10 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Thu, 22 Nov 2007 15:36:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(!source_file1){
					output.Format(&quot;Fehler beim Öffnen der Datei: %d&quot;, GetLastError());
					MessageBox (output);
				}
</code></pre>
<p>&quot;Fehler beim Öffnen der Datei: 0&quot;</p>
<pre><code class="language-cpp">if(!source_file1){
					output.Format(&quot;Fehler beim Öffnen der Datei: %s&quot;, GetLastError());
					MessageBox (output);
				}
</code></pre>
<p>&quot;Fehler beim Öffnen der Datei: (null)&quot;</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408255</guid><dc:creator><![CDATA[trequ]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:36:26 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Thu, 22 Nov 2007 15:39:55 GMT]]></title><description><![CDATA[<p>Außerdem setzen (fast) nur WinAPI-Funktionen die GetLastError-Informationen, wenn etwas schiefgegangen ist - fstreams normalerweise nicht.</p>
<p><em>überblickt den Code</em> Und ich sehe auch schon den Fehler - du hast vergessen, nach dem Schleifendurchlauf 'source_file1.clear();' aufzurufen, darum ist beim nächsten Anlauf (immer noch) dessen eofbit gesetzt.</p>
<p>PS: Und du kannst die Datei ruhig in etwas größeren Blöcken lesen und weitergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408261</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:39:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Thu, 22 Nov 2007 15:50:50 GMT]]></title><description><![CDATA[<p>Mit .close() gehts jetzt, danke.</p>
<p>Ich hab eine .txt Datei mit genau 1000 Zeilen und 200 Zeichen pro Zeile.</p>
<p>Sobald data[1] größer oder kleiner wird, wird die Datei auch größer oder kleiner.</p>
<p>Bei data[10000] sind es z.B. nur noch 981 Zeilen, mit data[100] fehlt in der letzten Zeile ein Teil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408273</guid><dc:creator><![CDATA[trequ]]></dc:creator><pubDate>Thu, 22 Nov 2007 15:50:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kopiervorgang mit mehr als 1 Ziel on Fri, 23 Nov 2007 08:25:06 GMT]]></title><description><![CDATA[<p>Ja, read erwartet auch einen Datenblock von genau der angegebenen Größe - und scheitert, wenn es am Ende einen unvollständigen Datenblock übergeben bekommt. Vielleicht solltest du dir mal readsome() ansehen:</p>
<pre><code class="language-cpp">std::streamsize size;
while( size=source_file1.readsome(data,sizeof(data)) , source_file1 )//ja ich weiß, diese Bedingung ist ein wenig tricky
{
  if(copy_to_target1)
    target_file1.write(data, size);
  if(copy_to_target2)
    target_file2.write(data, size);
  if(copy_to_target3)
    target_file3.write(data, size);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1408603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408603</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 23 Nov 2007 08:25:06 GMT</pubDate></item></channel></rss>