Lesen von Dateien gar nicht so einfach...



  • Hallo zusammen!

    Ich moechte in mein MFC Proggi ein paar Dateien einlesen. Problem ist, dass ich noch nicht weiss, wie viele es sein werden. D.h. der User kann das selbst entscheiden. Nun wollte ich dafuer eine verkettete Liste (oder etwas anderes dyanmisches) dafuer verwenden, scheitere aber leider schon beim einlesen! Ich moechte es naemlich dann an einen anderen Ort abspeichern. Hier zum test erstmal C:! Die Dateigroesse brauche ich leider auch, denn ich will die Datei nur ueberschreiben, wenn es eine neuere Datei ist (sich also etwas veraendert hat)! Kann man eigentlich auch den Dateinamen auslesen? Klappt aber irgendwie noch nicht:

    ifstream file ("c:\\100.bmp", ios::in|ios::binary);
      if (file.is_open())
      {
        ifstream::pos_type size;
        char * memblock;
        size = file.tellg();
        memblock = new char [size];
        file.seekg (0, ios::beg);
        file.read (memblock, size);
        file.close();
    
        cout << "the complete file content is in memory";
    
        delete[] memblock;
    
    	fstream binary_file("c:\\test.dat",ios::out|ios::binary);
              binary_file.write(file,size);
              binary_file.close();
      }
      else cout << "Unable to open file";
    

    ich gebe zu das ist aus nem tutorial kopiert (aus verschiedenen). ich will aber eigtl. nur die datei kopieren praktisch. nur der dateinamen soll sich aendern. die dateigroesse ist mir halt auch wichtig.

    zweite frage am besten gleich hinterher: kann man irgendwie heraus finden, ob es sich um eine binary datei handelt oder eine textdatei? ich moechte naemlich, wenn es eine textdatei ist das ganze als textfile einlesen dann weil das ja mehr moeglichkeiten bietet fuer das abspeichern (als html und so).

    danke!!!
    LG
    Chrisu



  • Vor size = file.tellg(); musst du file.seek (0, ios_base::end); einfügen, da du sonst noch am Anfang der Datei bist und size somit 0 wäre.

    Text-Dateien sind auch nichts weiter als "Binar-Dateien", die Angabe in deinem Programm entscheidet nur, wie die CRT/STL intern mit Zeilenumbrüchen umgeht.



  • Danke!!

    Bin schon recht weit jetzt. Einzig folgendes Prob hab ich noch: Wie kann ich heraus finden, ob eingelesene Datei Bin oder Text ist? Hab überlegt, einfach zu prüfen, ob es "txt" ist, aber meint ihr das ist sinnvoll? Möchte einen "unsauberen" Code schreiben...



  • Chrisu schrieb:

    Wie kann ich heraus finden, ob eingelesene Datei Bin oder Text ist?

    Dateien haben keine Eigenschaft "bin" oder "text". Einge Programme, wie z.B. FTP Clients, haben eine eigene Heuristik eingebaut um halbwegs brauchbar "erraten" zu können, mit welchem Modus eine Datei übertragen werden sollte. Diese gehen dann typischerweise nach der Dateiendung und/oder dem Inhalt. Allerdings ist das mit dem Inhalt so eine Sache: unter gewissen Umständen kann man sich zwar so gut wie sicher sein dass die Datei keine Textdatei ist (z.B. wenn sie Null-Bytes enthält), aber man kann sich nie sicher sein dass etwas eine Textdatei ist.

    Hab überlegt, einfach zu prüfen, ob es "txt" ist, aber meint ihr das ist sinnvoll?

    Ich würde sagen welches die beste Möglichkeit ist, kommt darauf an, zu welchem Zweck du die Unterscheidung Text/Nicht-Text treffen möchtest.

    Möchte einen "unsauberen" Code schreiben...

    Das ist einfach 🙂
    (Es sei denn du hast jetzt ein "k" vor "einen" vergessen)



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • C++ Forumbot schrieb:

    Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    😃 Trotzdem falsches Forum!



  • Jo, ich denke auch das gehört eher in "Rund um die Programmierung" 😉


Log in to reply