Microsoft inf Datei auslesen / ändern / schreiben



  • Hy,

    Ich habe folgendes Problem:
    Ich versuche verzweifelt mit C++ eine Windows inf Datei zulesen (zeilenweise),
    die Zeile zu vergleichen, wenn diese Übereinstimmt, diese zu ändern, und zu schreiben.

    ich kann diese Datei lesen, nur stimmt das Format nicht:
    ■[ V e r s i o n ]
    S i g n a t u r e = " $ W i n d o w s N T $ "
    D r i v e r V e r = 0 7 / 0 1 / 2 0 0 1 , 5 . 1 . 2 6 0 0 . 5 5 1 2

    Wenn ich diese mit einem Windows Text Editor öffnen sind keine Leerzeichen dort enthalten.

    Alleine das lesen mit dem vergleich klappt schon nicht?

    Woran kann das liegen?

    beispiel:
    ______________________
    #include <vcl.h>
    #pragma hdrstop
    #include <iostream>
    #include <fstream>
    #include <string.h>
    #include <string>
    #include <conio.h>
    #include <iostream>
    #include <fstream>
    #include <fstream.h>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
    #include <sstream.h>
    #include <cstring>
    #pragma argsused
    #include <iomanip>
    #include <stdlib.h>

    int main(int argc, char* argv[])
    {
    //FILE *f;
    CopyFile("C:\\WINDOWS\\\inf\\sysoc.inf", "C:\\WINDOWS\\\inf\\sysoc.txt",true);
    fstream f; // Datei-Handle
    string s;
    f.open("C:\\WINDOWS\\\inf\\sysoc.txt", ios::in); // Öffne Datei aus Parameter

    while (!f.eof()) // Solange noch Daten vorliegen
    {

    getline(f, s); // Lese eine Zeile

    cout << s << endl;

    if ( s == " m s m s g s = m s g r o c m . d l l , O c E n t r y , m s m s g s . i n f , h i d e , 7 " ) {

    cout << endl << "AAAAAAAAAAAAAAAAAAAAAAAA" << endl <<endl;

    f.close(); // Datei wieder schließen
    getch();
    return 0;
    }



  • Hallo,

    Verwende bitte Code-Tags.
    Kann es sein, dass deine inf-datei Unicode ist?
    Verwende mal die wide-char Varianten zum Einlesen.
    ifstream - wifstream
    string - wstring
    etc.
    Wozu hast du so viele, teilweise inkompatible, Header drin. Hier brauchst du nur
    fstream, iostream und string (conio.h für getch).



  • viele include dateien, bedeutet viele versuche, ursprünglich waren es drei,
    aber ich habe viele verschiedene ausprobiert.

    Das mit wide-char ist eine gute Idee, Probiere ich gleich aus, Danke!!

    Viele Grüße

    Markus



  • [C++ Error] Unit1.cpp(45): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'wstring'



  • Für Ausgaben von Widestreams brauchst du eigentlich wcout statt cout. Ich weiß aber jetzt nicht ob wcout beim Builder überhaupt implementiert ist. Bis zum BDS2006 funktionierte es jedenfalls nicht. Vielleicht konvertierst du deinen wstring erstmal in einen normalen string und gibst dann aus.
    z.Bsp. so

    std::string wstring2string( const std::wstring& src)
    {
        size_t size = src.size();
        char* narrow = new char[size+1];
        size_t ressize = wcstombs(narrow, src.c_str(), size);
        narrow[size+1] = '\0';
        string res = narrow;
        delete[] narrow;
        if( ressize == size_t(-1) ) return "";
        return res;
    }
    


  • wcout ist implementiert --> es erfolgt jedoch keine Ausgabe.

    wenn ich wstring convertierte folgt als Ausgabe lediglich

    \
    \
    \

    mehr nicht.

    Irgendwie funktieniert nichts, was ich bisher probiert habe.

    Jetzt muss ich weg, schaue heute Abend wieder rein.



  • cout << wstring2string(s) << endl;
    

    mit wide-char kommt gar keine Ausgabe.

    --> bringt keine ordendliche Ausgabe



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


Log in to reply