Problem mit WriteFile



  • Hallo,

    ich hab folgendes Problem:

    Ich öffne mit CreateFile das Diskettenlaufwerk und möchte anschließend etwas darauf schreiben. Jedoch schlägt WriteFile immer fehl. GetLastError liefert mir den Fehlercode 87: The parameter is incorrect.

    Hier mein Code:

    DWORD dwBytes;
        HANDLE hDrive;
        char data[12] = "Hello World";
    
        hDrive = CreateFile("\\\\.\\A:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    
        if (hDrive == INVALID_HANDLE_VALUE)
        {
            printf("Fehler bei CreateFile");
            return 0;
        }
    
        if (WriteFile(hDrive, (PCVOID)data, 11, &dwBytes, NULL) == 0)
        {
            printf("Fehler bei WriteFile: %d", GetLastError());
            return 0;
        }
    
        CloseHandle(hDrive);
    

    Gibt es da noch irgendetwas zu beachten, wenn man ohne Dateisystem auf die Diskette schreibt? Wollte nämlich ein kleines Programm schreiben, das mir etwas in den ersten Sektor der Diskette schreibt 🙂



  • Du kannst immer nur ein vielfaches von 512 (Sektorgröße) auf eine Diskette/Festplatte schreiben...

    Add: Um ganz korrekt zu sein: Du solltest "GetDiskFreeSpace" verwenden um die Sektor größe zu erfragen...



  • Stimmt. Da hätte ich auch selbst drauf kommen können. Großes Danke Schön Jochen 🙂

    Jochen Kalmbach schrieb:

    Add: Um ganz korrekt zu sein: Du solltest "GetDiskFreeSpace" verwenden um die Sektor größe zu erfragen...

    Naja, da ich davon ausgehe, dass ich nie mehr als 1,44 MB Daten auf die Diskette packen werde, brauch ich das eigentlich nicht. Aber wenn du mich schon auf die Idee bringst, werde ich das mit einbauen 👍



  • Oh, hab mich vertan. Ich dachte du meintest, ich solle mit GetDiskFreeSpace die Größe der Diskette ermitteln 😃

    Aber mit der Sektorgröße ermitteln hast du Recht. Nur das will nicht beim Diskettenlaufwerk funktionieren. Das funktioniert bei der Festplatte, aber wenn ich das Diskettenlaufwerk angebe, kommt wieder Fehler 87 😞

    DWORD dwSectorsPerCluster,
    DWORD dwBytesPerSector,
    DWORD dwNumberOfFreeClusters,
    DWORD dwTotalNumberOfClusters
    
    // funktioniert nicht:
    GetDiskFreeSpace("A:\\",
                     &dwSectorsPerCluster,
                     &dwBytesPerSector,
                     &dwNumberOfFreeClusters,
                     &dwTotalNumberOfClusters);
    
    // funktioniert:
    GetDiskFreeSpace("C:\\",
                     &dwSectorsPerCluster,
                     &dwBytesPerSector,
                     &dwNumberOfFreeClusters,
                     &dwTotalNumberOfClusters);
    

    Hab ich schon wieder was übersehen 😕



  • Ich denke Du kannst bei Disketten von 512 Bytes ausgehen...


Anmelden zum Antworten