Problem beim ändern einer Datei



  • ich wuerd sagen:
    - zeilenweise lesen und in einem string vector packen
    - nach der zeile suchen
    - mit insert den neuen text danach einfuegen
    - inhalt des vectors wieder schreiben

    PS. du bist im falschen sub-forum



  • Ok danke für die schnelle antwort.Dann werd ich mich da jetzt wohl ransetzen.
    Ihr habt mir sehr geholfen.
    Also als Subforum kam mir dieses hier am schlüssigstem vor.
    Naja trotzdem Danke.



  • deinem quelltext nach arbeitest du mit der winapi, und das gehoert ins winapi forum #gg



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • OK.
    Die ganzen MessageBoxen waren nur zur überprüfung was passiert und so.Die wären dann wieder rausgeflogen.
    Naja.Aber ich bekomm es immernoch nicht hin.
    Ich dreh fast durch.Im Moment versuch ich eigentlich nur die datei Zeilenweise zu lesen und Zeile für Zeile in eine andere Date zu schreiben.Also Zeile lesen Zeile schreiben nächste Zeile lesen nächste Zeile schreiben.
    Hab jetzt mal einfach ne Namensliste kopieren wollen.

    Peter
    Hans
    Marie <-nach dem letzten eintrag existiert noch ein Zeilenumbruch

    Mit dem Code:

    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void)
    {
    	WIN32_FIND_DATA wfd;
    	HANDLE file;
    	FILE* f;
    	FILE* fnew;
    	char buffer[50];
    	bool bootlog = false;
    
    	file = FindFirstFile("*.htg",&wfd);
    
    	do
    	{
    		if(!strcmp(wfd.cFileName,"defaultfs.htg")){}
    		else
    		{
    			f = fopen(wfd.cFileName,"r");
    			if(f == NULL)
    				MessageBox(NULL,wfd.cFileName,"Fehler beim öffen",MB_OK);
    			fnew = fopen("temp.htg","w+");
    			if(fnew == NULL)
    				MessageBox(NULL,"Temp.htg konnte nicht angelegt werden","Fehler beim anlegen",MB_OK);
    			fgets(buffer,50,f);
    			while(!feof(f))
    			{
    				fputs(buffer,fnew);				
    				MessageBox(NULL,buffer,"Schreibe",MB_OK);
    				fgets(buffer,50,f);
    			}
    			fclose(f);
    			fclose(fnew);
    		}
    	}while(FindNextFile(file,&wfd));
    	return 0;
    }
    

    Wenn ich das jetzt ausführe steht garnichts in der Temp.htg.Wenn ich aber den stream von fputs auf stdout setzte dann zeigt er mir alles genau so an wie es sein sollte.Ich hatte auch schon ne Variante da stand in der Temp.htg nurnoch Marie und nichts anderes.Obwohl er alle Zeilen durchgegangen ist.Ich dreh durch.
    Würde mich freuen wenn ihr mir nochmal helfen könntet.
    Danke



  • Ok hab etwas herausgefunden. Wenn die Datei Temp.htg noch nicht existiert dann klappt alles super.Wenn die Datei aber schon axistiert dann ist sie nach ablauf des programms leer.

    Hier jetzt der aktuelle code:

    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void)
    {
    	WIN32_FIND_DATA wfd;
    	HANDLE file;
    	FILE* f;
    	FILE* fnew;
    	char buffer[50];
    	bool bootlog = false;
    
    	file = FindFirstFile("*.htg",&wfd);
    
    	do
    	{
    		if(!strcmp(wfd.cFileName,"defaultfs.htg")){}
    		else
    		{
    			f = fopen(wfd.cFileName,"r");
    			if(f == NULL)
    				printf("Fehler beim öffnen der %s",wfd.cFileName);
    			fnew = fopen("temp.htg","w+");
    			if(fnew == NULL)
    				printf("Fehler beim anlegen von Temp.htg");
    			while(fgets(buffer,50,f))
    			{
    				if(fputs(buffer,fnew))
    					printf("Fehler beim Schreiben von: %s",buffer);
    				printf("Schreibe: %s",buffer);
    			}
    			fclose(f);
    			fclose(fnew);
    		}
    	}while(FindNextFile(file,&wfd));
    	return 0;
    }
    

    Woran liegt das. Ich öffne doch die temp.htg mit "w".Das bedeutet doch das der inhalt der vorhandenen datei zerstört wird und alles neu angelegt wird? Ich kapiers nich.



  • funktioniert es mit fwrite?



  • Nein damit pasiert genau das selbe.Ist auch nicht so schlimm da die temp.htg am ende sowieso gelöscht wird.Also wäre sie beim nächsten aufruf nichtmehr vorhanden.Aber habe jetzt mal wieder versucht auf mit diesem Ansatz mein Vorhaben von ganz oben zu realisieren Also das mit --bootlog.log usw.und jetzt ist die Temp.htg in jedem fall leer.egal ob sie schon vorhanden war oder nicht.



  • Hab grad noch etwas herausgefunden.Wenn die *.htg Datei die gefunden wurde einen langen dateinamen hat zb.: 1234567890.htg dann ist die temp.htg davon leer.wenn sie aber zb.: 1234.htg heißt dann klappt es wieder super.leider hat die Datei die ich ursprünglich einlesen will nen langen Dateinamen.Was mich aber bei der ganzen sache verwundert ist das das lesen aus der langen Datei ja super klappt.Nur das schreiben in die Temp.htg schlägt ja fehl.und die hat ja nen kurzen Dateinamen.Ich seh irgendwie garnichmehr durch warum das alles nich klappt.



  • du loopst ja mehere dateien durch, bist du sicher das als letzte datei keine leere datei ist - oder gar die input und output datei die selbe ist {da im selben verzeichnis ist das moeglich} ?

    wie ist denn das wenn du nicht mit findfile durch dateien loopst sondern nur eine direkt angibst ?


Anmelden zum Antworten