CreateFile mit variablem Dateiname



  • Ich versuche ein neues File mit folgendem Code zu öffnen:

    cLutTabelle::cLutTabelle(char * caName){
        ...
        HANDLE hFile = CreateFile(caName,
            GENERIC_WRITE | GENERIC_READ, 0,
            NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        ...
    

    Das Problem ist der Name des zu erzeugenden Files kann ändern und wird über den Parameter caName übergeben. Aber wie gebe ich das im CreateFile an? Ich will nicht den Namen angeben müssen mit CreateFile(_T("blabla.txt"), .....). Kann man das mit CreateFile gar nicht?



  • Häh? Steh ich auf dem Schlauch oder so? 😕

    Dein Code oben sollte doch genau so funktionieren wie du dir das vorstellst.

    mit caName übergibts den Dateinamen an deine Funktion und mit

    ... 
        HANDLE hFile = CreateFile(caName, 
            GENERIC_WRITE | GENERIC_READ, 0, 
            NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
        ...
    

    erstellst du es dann mit diesen Namen. 😕 😕



  • schnulle schrieb:

    Kann man das mit CreateFile gar nicht?

    Aber natürlich kann man das. In Deinem Beispiel machst Du das doch sogar auch.



  • Ja richtig ich mache es! Das Problem ist der Code ist nicht lauffähig! 🙂

    Sagen wir ich übergebe ein Array mit 30 char, dann bekomme ich die Meldung:

    cannot convert parameter 1 from 'char *' to 'const unsigned short *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast



  • Du hast irgendwo das Symbol UNICODE definiert. Das mach mal weg.



  • Dieses define steht bei mir im File WCE.h ich hab es mal ausgeklammert aber es hat nichts geändert!



  • Dann steht das woanders auch noch, z.B. könnten die Compiler-Einstellungen auf UNICODE-Build stehen. Auch kannst Du über diese Einstellungen Preprocessor Symbole definieren. Oder unterstützt CE sowieso nur UNICODE?



  • Windows CE unterstützt ausschließlich Unicode. Man muss mit Unicode programmieren.

    p.s.:
    Nimm wchar_t anstelle char.



  • Super Danke! Jetzt funktionierts! Leider hat sich dadurch aber ein anderes Problem ergeben. Vorher konnte ich sämtliche String-Bastel-Methoden (strlen, strcat, strcpy) darauf ausüben. Aber jetzt natürlich nicht mehr da es ja nun kein char * mehr ist sondern ein unsigned short *!

    Nun kann leider meinen Pfadnamen nicht mehr so schön zusammenfassen! Hier nochmal der Code inklusive Stringmanipulation:

    int WINAPI WinMain(    HINSTANCE hInstance,
    		HINSTANCE hPrevInstance,
    		LPTSTR    lpCmdLine,
    		int       nCmdShow)
    {
    	wchar_t * cFilename = _T("LoUpTab.txt");
    	cLutTabelle LUTt(cFilename);
    
    	return 0;
    }
    
    cLutTabelle::cLutTabelle(wchar_t * pcName){
    
    	// String für Pfadname zusammensetzen
    	char caPathName[MAX_PATH_LENGTH];
    	strcpy( caPathName, "\\\\FFSDISK\\\\" ); // Ergibt "\\FFSDISK\\"
             strcat( caPathName, pcName );    // Daraus sollte sich dann
                                              // \\FFSDISK\\LoUpTab.txt ergeben
    
    	HANDLE hFile = CreateFile(caPathName,
             GENERIC_WRITE | GENERIC_READ, 0,
             NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    
             ....
    

    Daraus folgt dann der Fehler:

    error C2664: 'strcat' : cannot convert parameter 2 from 'unsigned short *' to 'const char *'

    Kann da noch etwas machen oder muss ich schon von beginn an den gesammten Pfad eingeben?



  • wcslen, wcscat, wcscpy



  • Vielen Dank euch allen 😃 ! Hat geklappt wie am Schnürchen!


Log in to reply