Kopieren eines Files



  • Hallo ich möchte ein 'Orginal' File kopieren.
    aber irgendwie läuft er die nachfolgende behandlung nicht durch.
    und das File wird auch nicht erstellt.

    try
    {
    	//erstellen des neuen txtfiles
    	if(file1.Open(nameneu, CFile::modeCreate || CFile::modeReadWrite,&e))
    	{
    		try
    			{
    	    // öffnen des alten files 
    	    	if(file2.Open(altesfile,CFile::modeReadWrite, &e))
    				{
    					MessageBox("ja");
    				}
    		}
    			// exception behandlung zu altesfile 		catch (CFileException e)
    		{AfxMessageBox(" Fehler beim Aufrufen der Datei ", MB_ICONSTOP | MB_OK); }
    	}
    }
    // exception behandlung zu nameneu 
    catch (CFileException e)
    {AfxMessageBox(" Fehler beim Aufrufen der Datei ", MB_ICONSTOP | MB_OK); }
    

    nameneu und altesfile sind beides Varibalen vom typ CString.

    Hat jemad einen Verbesserungsvorschlag oder einen tip was ich falsch mache

    Wäre echt dankbar danke



  • Wie meinst du das?
    1. wirklich "file"
    oder
    2. eine Datei ?



  • Es ist eine Textdatei/ File

    gibt es da einen grossen unterschied??



  • Dir ist da ein Fehler unterlaufen

    Es heißt

    if(file1.Open(nameneu, CFile::modeCreate | CFile::modeReadWrite,&e))
    

    Wenn du zwei Pipe-Symbole '|' benutzt dann wird es falsch interpretiert...

    Gruß
    :: NoName ::



  • 2x | => oder



  • oh
    danke

    aber schreiben erstellen tut er das neue immer noch nicht...
    aber er durchläuft die schleife



  • Hmm, dein Code öffnet ja nur das erste und zweite File. Du musst schon den Inhalt von File 1 in das Zweite File reinschreiben....

    Gruß
    :: NoName ::



  • danke

    hab aber den fehler gefunden.
    Er hat schon was erstellt aber immer das Falsche, jetzt muss ich schauen wo ich immer die Fehler mit dem Pfad mache.



  • hi nochmal

    ich habe noch ein wenig probs mit dem schreiben in das neu erstellte file,
    da das altefile, zu diesem Zeitpunkt in einer anderen Fkt geöffnet ist.
    Kann ich dennoch den Inhalt auslesen an dieser stelle und in das neue schreiben?? Die Exception springt ja nicht rein, also müsste ja kein fehler dies bzgl. sein oder??

    hier nochmal der code:

    try
    {
    	//erstellen des neuen txtfiles
    	if(file1.Open(nameneu, CFile::modeCreate | CFile::modeReadWrite,&e))
    	{
    		try
    			{
    	    // öffnen des alten txtfiles 
    	    	if(file2.Open(altesfile,CFile::modeReadWrite, &e))
    			{ // inhalt aus altesfile auslesen (zeilenweise)
    				while(file2.ReadString(inhalt)) 
    					{ 
    						file2.WriteString(inhalt);	
    					MessageBox(inhalt);
    				}
    				}
    		}
    			// exception behandlung zu altesfile 
    		catch (CFileException e)
    		{AfxMessageBox(" Fehler beim Aufrufen der Datei ", MB_ICONSTOP | MB_OK); }
    	}
    }
    // exception behandlung zu nameneu (kopie)
    catch (CFileException e)
    {AfxMessageBox(" Fehler beim Aufrufen der Datei ", MB_ICONSTOP | MB_OK); }
    

    oder mache ich etwas falsch beim schreiben???



  • Hmm, der Code ist ein bisschen komisch:

    if(file2.Open(altesfile,CFile::modeReadWrite, &e)) 
                { // inhalt aus altesfile auslesen (zeilenweise) 
                    while(file2.ReadString(inhalt)) 
                        { 
                            file2.WriteString(inhalt);    // Hier...
                        MessageBox(inhalt); 
                    } 
                    }
    

    Du öffnest das File2, liest es Zeilenweise aus und schreibst das, was du aus File2 ausgelesen hast, wieder in das File2 rein....

    es müsste so heißen :

    if(file2.Open(altesfile,CFile::modeReadWrite, &e)) 
                { // inhalt aus altesfile auslesen (zeilenweise) 
                    while(file2.ReadString(inhalt)) 
                        { 
                            file1.WriteString(inhalt);    // Hier....
                        MessageBox(inhalt); 
                    } 
                    }
    

    Gruß
    :: NoName ::



  • hi,

    habe ich eben geändert (kleiner schreib fehler)
    aber es wird noch immer nichts in das file geschrieben.

    Ich habe auch nochmal nach geschaut das File ist doch nciht geöffnet worden.
    daher fällt das weg



  • Hmm, ich kann kein weiteren Fehler erkennen. Welches File wird denn nicht geöffnet ? File1 oder 2 ?

    Gruß
    :: NoName .:



  • weiss nicht ob sie geöffnet werden..
    Es wird die while anweisung nicht ausgfeführt.
    Da hatte ich eben eine MessageBox drin.
    Die if anweisungen werden zumindest durch gearbeitet.

    ...
    while(file2.ReadString(inhalt)) 
    { 
    file1.WriteString(inhalt);	
    }
    ...
    


  • Hallo,

    die MFC ist ja schön und gut, aber manchmal auch ein wenig umständlich.

    Ich habe deinen Code nicht genauer untersucht, schlage aber vor eine
    effektivere Methode zu nehmen, die heist: WINAPI

    ::CopyFile(altesfile, nameneu, TRUE);
    

    Wenn altesfile existiert dann wars das schon.

    Gruss
    EarlyBird



  • sieht ja nicht schlecht aus

    aber auch hier bleibt das file leer

    muss das neue File den schon existieren???
    well wenn nein wäre das einfacher und schneller



  • ok ich habe es gefunden in der Msdn

    aber was passiert wenn ich es FALSE setzte und das File existiert???

    sieht ja einfach aus aber anscheint doch nicth zu gebrauchen weil es kann durch aus sein das beim spätern lauf der Anwendung das File schon existieren.

    Obwohl

    ist es möglich den kompletten inhalt aus einem Ordner zu löschen??
    und wenn ja wie???



  • Hi,

    nein, das neue File muss nicht existieren. Aber wenn das auch nicht funktioniert,
    vermute ich mal, das der Inhalt der Varaible des alten Files nicht richtig ist.

    Hast Du Dir die Variable mal im Debugger angesehen? Oder es mit einer absoluten
    Pfadangabe versucht?

    Schneller ist es auf jedenfall und funktioniert auch mit binär und text Dateien.

    Wenn du TRUE setzt, passiert gar nichts, falls das File existiert. Wenn False dann
    wird es gnadenlos überschrieben. Was im endeffekt passiert gibt der Rückgabewert
    der Funktion zurück.

    Gruss
    EarlyBird



  • Du kannst mit FindFirstFile durch das Directory browsen und dann mit DeleteFile
    die Files löschen.



  • siehe beitrag zuvor

    ich schaue mir dann mal das mit dem debuggen an

    aber das file wird ncith erstellt damit, egal ob ich zum schluss true oder false sage.
    Es sieht so aus als würde über alles was mit schreiben in das neue file zu tun hat, einfach ignoriert werden....



  • ich kenne aber nciht die namen der files die gelöscht werden sollen


Anmelden zum Antworten