mehrere Kopien einer Datei



  • Hi,
    ich habe ein Programm geschrieben, das eine Textdatei (Quelle.txt) kopiert (in Ziel.txt). Mein Problem ist nun, dass ich diese Datei gerne oefters kopiert haben moechte, er aber bei meinem Quellcode alles immer wieder in "Ziel.txt" schreibt und letztenendes nur eine Kopie gemacht hat.
    Wie waere es moeglich, dass ich den Ausgabenamen bei jedem Durchgang der while-Schleife automatisch aendere, zum Beispiel "Ziel0.txt", dann "Ziel1.txt", dann "Ziel2.txt" ... "Ziel20.txt"?

    while(int i=1 <= 30)
    {
    	ifstream quelle;
    	ofstream ziel;
    	quelle.open("Quelle.txt", ios::nocreate);
    	ziel.open("Ziel.txt", ios::in|ios::binary);
    
    	while(quelle.get(data))
    	{
    		ziel.put(data);
    	}
    }
    

    weiss nicht, ob es wichtig ist:
    w32; Borland C++ 5.01

    Danke fuer jede Antwort 🙂



  • so mal ganz ausführlich...

    int i = 1;        //laufzahl
     stringstream sstr;
     string number;
     string ext=".txt";   //dateiendung
     sstr<<i;                  //für umwandlung in text
     string str = "hallo";
     sstr>>number;        //zahl aus stream holen(als string)
     str+=number;         //nummer anhängen
     str+=ext;            //dateiendung anhängen
     fstream test(str.c_str(),ios::out);
     test<<"hallo";        //was in datei schrieben
    

    du musst nur eben eine schleife nehmen, und eben das i immer erhöhrn...sonst ändert sich dateiname nich

    und du kannst nich test<<"hallo" machen, weil du ja binär arbeitest!



  • aah.. haa... hm -.-*

    Muss ich mir nochmal ein bisschen angucken, danke!!



  • wenn du was net verstehst, frag einfach!



  • hm, diese Art etwas in eine Datei zu speichern ist fuer mich neu. Ich dachte mir koennte jemand eine Loesung wie

    while(int i=1 <= 30)
    {
     char Datei[3]="Ziel";
     ifstream quelle;
     ofstream ziel;
     quelle.open("Quelle.txt", ios::nocreate);
     ziel.open(Datei+i, ios::in|ios::binary);
    
     while(quelle.get(data))
     {
      ziel.put(data);
     }
    }
    

    liefern (was leider nicht funktioniert).
    Geht es denn auf einer Art, die meiner aehnelt, oder muss ich jetzt das neue da lernen, ich will das ja schliesslich selber kapieren und nicht einfach ein Stueck Quellcode aus dem Internet kopieren, aus dem ich nichts erkennen kann..

    Ich bin nicht so gut in C++, trotz Erklaerung verstehe ich nicht, was da steht.



  • hm...also erstmal dein while.....

    //nicht 
    while(i=1<=30)
    
    //das geht so nicht!
    //wenn dann
    int i=1;
    while(i<=30)
    {
    i++;
    }
    

    weiter...

    char Datei[3]="Ziel" //du reservierst zu wenig speicher, nämlich nur für 3 
    //zeichen, du benutzt aber 5
    also char Datei[10] //damit immer noch etwas reserve ist
    

    auch das dürfte nicht gehen

    ziel.open(Datei+i, ios::in|ios::binary);
    //denn erstens kann man chars nicht einfach so anhängen, und 2tens 
    //würde es ja dann "Ziel1" heißen, ohne Endung etc (wenn es gehen würde)
    //darum nimmt man String
    string Datei="Ziel";  
    //und mit += kannst weitere strings anhängen
    string endung=".txt";
    Datei+=endung;  //das ergibt "Ziel.txt"
    

    und das is noch nich alles, an deiner stelle würd ich mich erstmal an einfachere sachen wagen



  • ah.. jetzt hab ich's verstanden, weiss auch wie ich es jetzt mache, danke 😉

    Mann muss immer einen Schritt weiter gehen und die Fehler mit der while-Schleife habe ich ja gar nicht in meinem Quelltext, die habe ich eben hier nur hingekrickelt

    Ich dachte "char Date[3]" koennte doch 4 Buchstaben speichern (Buchstabe 0, 1, 2 und 3).. aber so habe ich es ja sowieso nicht 🙂 danke nochmal, super Board



  • kein problem, lass aber mal deine lösung sehen...hast wirklich alles verstanden?

    Übrigens:
    char Ziel[3] bedeutet platz für 3 zeichen, nämlich Ziel[0]-Ziel[2]
    Und "Ziel" sind 5 zeichen weil:
    Z - i -e - l - /o <-damit wird char kette abgeschlossen!IMMER....also merken
    1 -2 -3 -4 -5


Anmelden zum Antworten