CreateFile Frage



  • Hi,

    ich versuche mit CreateFile eine Datei zu öffenen, das gelingt mir aber nicht

    Anbei der Code:

    BOOL ReadWholeFile(char* pszErrMsg,char *pszFileName)
    {
    
     hFile=CreateFile(_T(pszFileName),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    
      if(hFile==INVALID_HANDLE_VALUE)           //Check ob Hanlde gültig
      { if(pszErrMsg) sprintf(pszErrMsg,"Fehler bei CreateFile(...), GetLastError: '%d'",GetLastError);
        goto abbruch;
      }
    

    Aufrufen tu ich es aus der main:

    int main(int argc, char* argv[])
    {
        char szFile[254];
    	char szErrmsg[2500];
    
    	strcpy( szFile, argv[1]);
    
    	if(!ReadWholeFile(szErrmsg,szFile))
    	{
    	 cout << szErrmsg;
    	}
    

    Ich bekomme immer ein ungültiges Handle beim CreateFile. Ich denke es liegt daran wie ich den Pfad übergebe.
    Aufrufen tue ich es über die Console direkt mit: test.exe "test.txt"
    Die Datei test.txt gibt es im aktuellen Verzeichnis.

    Danke im Voraus.

    Gruß

    Heiner.



  • Und was liefert GetLastError?



  • Da steht: GetLastError: 2089943857



  • Ich habe das Problem gefunden.

    Ich hatte die Textdatei noch im Editor geöffnet und das hat vermutlich das Problem verursacht.

    Kaum ist der Editor zu, gehts.

    Was kann da Schuld sein ? Es war der UltraEdit. Sperrt der die Datei, bzw. kann ich das mit CreateFile umgehen ?



  • heiner69 schrieb:

    Sperrt der die Datei, bzw. kann ich das mit CreateFile umgehen ?

    Jo; gar nicht;



  • Öffne sie mal nicht exclusiv sondern z.B. mittels FILE_SHARE_READ

    @CodeFinder: Nanana...



  • ^^ hmm ich hatte darauf angespielt:

    dwShareMode: [...] If this parameter is 0 (zero) and CreateFile succeeds, the object cannot be shared and cannot be opened again until the handle is closed. For more information, see the Remarks section of this topic.

    Quelle: http://msdn2.microsoft.com/en-us/library/aa363858.aspx

    Denn wenn das betroffene andere Programm ('UltraEdit') so vorgegangen ist (wovon man doch eigentlich immer ausgehen sollte), wird das doch nit funzen, oder hab ich da was übersehen 🙄 ?

    EDIT: Quote gefixt



  • Na, ich gehe davon aus, dass vernünftige Programm zumindest immer mit "FILE_SHARE_READ" eine Datei öffnen.



  • also ich kenn es so das UltraEdit nie dateien sperrt
    wenn du eine datei un UE auf hast, diese woanders manipulierst, fragt der UE beim naechsten start nach ob du sie neu laden willst da sie geaendert wurde - haben wir auf arbeit staendig

    darum gibts da ja auch die funktion "Revert to Saved"



  • Hm na ok, versuchen sollte man es natürlich allemal, und zur Not kommt eben ein Message 👍 BOX 😃 .


Anmelden zum Antworten