Nach Einlesen einer Datei, wird sie mysteriös verändert



  • Hy,
    ich hab' da ein Problem mit dem Lesen einer Textdatei.

    Also ich starte folgendes simples Programm:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      FILE *pFile;
      pFile = fopen(argv[1],"r");
    
      for(;;)
      {
        if(fgetc(pFile)== EOF)
          break;
      }
      fclose(pFile);
    
      system("pause");
      return 0;
    }
    

    als Parameter geben ich ein Textdatei, die folgenden Inhalt enthält(ohne ""):
    "Übelst"

    Nachdem das Programm fertig ist, sind in der Textdatei nur noch japanische Zeichen. Mir ist klar, dass es am Ü liegen muss, aber dass muss da halt um jeden Preis stehen.

    Also, wie kann ich das Problem lösen?



  • hmm..
    Das folgende Programm gibt den vollständigen Text einer Textdatei aus:

    // sicherheitsabfrage ob parameter angegeben wurden fehlt!!!
    FILE *stream;
    if((stream=fopen(argv[1],"r"))==NULL)
    {
       printf("\n ERROR: Datei konnte nicht zum lesen geoeffnet werden");
    }
    else
    {
       do
       {
          putch(fgetc(stream));
       }
       while(!feof(stream));
       fclose(stream);
    }
    

    so sollte das auslesen funktionieren...
    wenn du mit dem parameter "r" eine datei öffnest, wird sie nomalerweise nicht verändert...
    also sollte nach deinem Programm noch immer das selbe in der datei stehen wie vorher. ⚠

    mfG ©h



  • Ich weiß, dass man mit "r" keine Dateien verändern kann, aber verdammt teste es selber! Es ändert halt die Datei. Bei deiner Methode geht es auch nicht, jedoch habe ich die Zeile:

    putch(fgetc(stream));
    

    in

    putc(fgetc(stream), stream);
    

    geändert, da es sonst nicht ging. Also teste es ruhig und kompilier dein, oder mein Programm und übergib ihm eine Datei, in der "Übelst" als erstes Wort steht.

    !!!BITTE HELFT MIR!!!



  • ACHTUNG!!!

    PS... schreibst du immer c++?? (iostream) putch ist nämlich in einer *.h datei
    ich glaube conio.h (bitte um korrektur wenn falsch)... vielleicht geht es mit "cout<<fgetc....<<flush; genauso..

    also.. und "putc" != "putch"... weil putch gibt zeichen auf bildschirm aus...
    und putc schreibt zeichen in die datei auf die "stream" zeigt...

    da du aber die datei mit "r" öffnest.. kannst du deren Inhalt nicht verändern.. dh. nicht mit "putc" hineinschreiben..



  • Oh schitt, was hab ich denn da gemacht. Ganz dicker Fehler von mir, aber es liegt nciht an der Ausgabe, sondern an dem Lesen der Datei!



  • Also ich habe das ganze nochmal mit cout gemacht und es wurde erwartungsgemäß alles ausgegeben. Die Datei hat sich trotzdem verändert



  • Dieses Programm gibt den Inhalt der datei "test2.txt" aus... der Inhalt wird dadurch NICHT verändert
    (statt argv.. habe ich arg genommen)

    #include<stdio.h>
    #include<conio.h>
    
    void main()
    {
    	// sicherheitsabfrage ob parameter angegeben wurden fehlt!!! 
    	FILE *stream; 
    	char arg[50]="test2.txt";
    
    	if((stream=fopen(arg,"r"))==NULL) 
    	{ 
    	   printf("\n ERROR: Datei konnte nicht zum lesen geoeffnet werden"); 
    	} 
    	else 
    	{ 
    	   do 
    	   { 
    		  putch(fgetc(stream)); 
    	   } 
    	   while(!feof(stream)); 
    	   fclose(stream); 
    	} 
    }
    


  • noch mal das programm mit parametern

    #include<stdio.h>
    #include<conio.h>
    
    int main(int argc, char *argv[])
    {
    	// sicherheitsabfrage ob parameter angegeben wurden
    	if(argc<2)
    		return(1);
    
    	FILE *stream; 
    
    	if((stream=fopen(argv[1],"r"))==NULL) 
    	{ 
    	   printf("\n ERROR: Datei konnte nicht zum lesen geoeffnet werden"); 
    	} 
    	else 
    	{ 
    	   do 
    	   { 
    		  putch(fgetc(stream)); 
    	   } 
    	   while(!feof(stream)); 
    	   fclose(stream); 
    	}
    	return(1);
    }
    


  • Also, ich habe mal folgendes gemacht:
    -Ich habe unter DOS eine Datei mit dem Inhalt "Übelst" erstellt.
    -Ich habe dein oder mein Programm unter DOS ausgeführt und als Parameter die vorher erstellte Datei angegeben
    -Er hat alles ausgegeben und die Datei war wie vorher.

    Arbeite ich jedoch mit Windows und benutze das, auf DOS-Ebene arbeitende, Programm, ist das Problem da, dass das DOS-Ü != das Win-Ü ist.
    Ich verstehe jedoch nun nciht wieso das so ist und wie ich das Problem beheben kann. Dos gibt anstatt eines Üs (aus einer "Win"Textdatei) ein Rechteck aus. Und beim Lesen des "Rechteckes" wird anscheinend die Datei verändert.
    Könnte es sein, dass dieses Rechteck eventuell ein Steuerelement oder so ist?

    Wichtig ist mir jedoch, das ich unter WinXP mit einem DOS Program eine unter Windows geschriebene Datei, die "Win"-Sonderzeichen enthält, lesen kann ohne Sie zu verändern(das Rechteck an sich ist auch nicht weiter schlimm)

    !!!Es klappt bei mir einfach nicht. Bitte sagt mir was ich falsch mache!!!





  • Dankeschön!!!


Anmelden zum Antworten