Kopieren eines Files



  • 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



  • hallo,

    die Optionsfelder gehne zwar immer noch ncith so richtig aber ich habe andere fehler im code gefunden...

    Jetzt habe ich mal ne andere frage
    und zwar wenn ich ein file habe, dessen Pfad etwa so aussieht

    '..\\abc\\x y z.txt'
    

    (beachte die leerzeichen )

    würde das gleiche file geöffnet werden wen die Leerzeichen nicht wären

    '..\\abc\\xyz.txt'
    

    oder geht das nciht

    Weil ich habe ein Problem mit den Namen beim auslesen..

    ich ändere ja den Pfad im Program, von altesfile in nameneu

    int nTmp = inhalt.ReverseFind('\\'); //suche nach \\ hinten beginnent
    			inhalt.Delete(nTmp-inhalt.GetLength(),nTmp); //schneite vor \\ alles ab
    			DWORD l =inhalt.GetLength();
    			inhalt.Delete(1-l);// \ vor filename entfernen
    			int a = inhalt.ReverseFind('.'); // von hinten den Punktfinden
    			inhalt.Delete(inhalt.GetLength()-a, a);
    			MessageBox("hier pfad ohne endung", inhalt);
    
    			// neuer Pfad der kopie des Orginal Txt
    			nameneu.Format("%s%s%s", kochentxt,inhalt,txt);
    			MessageBox(nameneu,"gefüllt mit nameneu");
    

    Und hierbei kann es ja ein file geben das im Namen leerzeichen enthält.
    oder wäre es bessere wenni ch einfach davon ausgehe das es keine files mit leerzeichen gibt.

    Der Code stimmt aber sowet oder.



  • vergesst den letzten post der bringt es eh nicht
    und habe ihn deshalb aus dem code verbannt.
    Nur nochmal leerzeichen in Pfadnamen sind doch egal bei meiner artder verarbeitung oder???

    das mit dem CopyFile hat vorhin auch mal funktioniert nur jetzt nciht mehr bin aber auf fehler suche....



  • Hmm, was funktioniert denn nicht? Wird das File überhaupt nicht kopiert oder wird es erstellt aber ohne Inhalt ?

    Gruß
    :: NoName ::



  • Hallo,

    tschuldigung hab den fehler gefunden gehabt.
    Der Pfad war falsch abgelegt worden (mit zuvielen zeichen)
    Hatte es endeckt und jetzt geht es auch

    Danke



  • Hallo,

    ich noch mal:

    kann das sein das die Files dananch:

    ::CopyFile(altesfile, nameneu, TRUE);
    

    noch geöffnet sind???

    Weil die Kopie wird erstellt, ich kann aber aus dem file nichts lesen, daher meine Frage.



  • Hmm, scheint so. Versuch doch mal mit CFile::Close() die Datei zu schließen und danach die restlichen Parameter einzusetzen ( CFile::Read etc. )

    Gruß
    :: NoName ::



  • sorry

    aber ich weiss nciht wie ich das so schlieesen soll, auch mit deinen angaben.
    Hab eben in der msdn gesucht, aber irgendwie weisds cih echt nciht wie


Anmelden zum Antworten