USB-Stick



  • Hallo Leute

    ich habe mir ein Programm geschrieben das vom USB-Stick gestartet wird. Nun möchte ich nach dem Programmstart über eine Menü Daten von diesem Stick laden. Nun mein Problem. Wie bekomme ich mit ob der Stick nach dem Programmstart wieder abgezogen wurde??????

    Gruß Sitt0038



  • Sitt0038 schrieb:

    Hallo Leute

    ich habe mir ein Programm geschrieben das vom USB-Stick gestartet wird. Nun möchte ich nach dem Programmstart über eine Menü Daten von diesem Stick laden. Nun mein Problem. Wie bekomme ich mit ob der Stick nach dem Programmstart wieder abgezogen wurde??????

    Gruß Sitt0038

    Prüfen, ob ein Pfad mit dem Laufwerk-Buchstaben noch gültig ist? (Also so eines zum Beispiel: "F:\"). Also eher ein Ansatz 😉

    Edit: Laufwerk-Buchstabe klingt eher unpassend... wie heißt das denn eigentlich richtig?



  • mit der Win-Funktion GetModuleFileName() kannst du den kompletten Pfad deiner Exe ermitteln. Dann mit _wstat() prüfen ob diese Datei vorhanden ist, oder mit _tsplitpath() den Pfad in seine Bestandteile zerlegen und nur Laufwerk prüfen, siehe hier http://www.c-plusplus.net/forum/257277



  • Dein Freund:
    WdfUsbTargetDeviceIsConnectedSynchronous

    siehe auch
    http://msdn.microsoft.com/en-us/library/windows/hardware/ff553101%28v=vs.85%29.aspx
    Generelles und Einführendes über dem Niveau "Was ist ein Laufwerksbuchstabe" findest Du zu USB unter Windows hier
    http://msdn.microsoft.com/en-us/windows/hardware/gg487341
    und hier
    http://msdn.microsoft.com/en-us/library/windows/hardware/ff540174%28v=vs.85%29.aspx
    Nett ist auch diese Lib:
    http://www.codeproject.com/Articles/60579/A-USB-Library-to-Detect-USB-Devices
    Viel Spaß ist ein schönes Thema



  • Wie bekomme ich mit ob der Stick nach dem Programmstart wieder abgezogen wurde??????

    Na indem dir alle Funktionen zum Auflisten des Verzeichnisses oder Laden von Dateien nen entsprechenden Fehler liefern.

    Vorschlag: hol dir beim Starten des Programms das Verzeichnis wo das Programm steht (GetModuleFileName), und setzte das als aktuelles Verzeichnis (SetCurrentDirectory). Dadurch sollte die "sicher entfernen" Option von Windows schonmal melden dass der Datenträger "im Moment nicht entfernt werden kann weil blablabla" - selbst wenn das Programm mit einem anderen "current directory" gestartet wurde.

    Und wenn der User den Stick trotzdem einfach abzieht, dann wirst du wie gesagt bei sämtlichen File-/Verzeichnis-Funktionen mit denen du auf den Stick zugreifen willst einen entsprechenden Fehler bekommen. Behaupte ich mal 🙂
    Anhand des Error-Codes wird sich dann auch ermitteln lassen ob der Fehlergrund der abgezogene Stick ist (bzw. allgemeiner: das "verschwundene" Speichermedium), oder was anderes wie defekte Sektoren oder falsche Funktionsparameter.

    @Shiba
    Wieso eine Lösung die komplizierter als nötig ist, und noch dazu nur mit USB Sticks funktioniert?
    Ich denke es wird wohl kein Schaden sein, wenn das auch mit eSATA Sticks/Platten, CDs/DVDs oder einfach ganz normalen Festplatten funktioniert - ohne dass man dazu extra Code schreiben müsste...



  • Danke für die Antworten. Die haben mir sehr geholfen. Habe das nun durch die Fehlerabfrage realisiert.
    Danke. 👍 👍



  • @hustbaer
    Die Lösung mit der usb-api war der Vorschlag auf die Frage wie man erkennt, ob der USB-Stick abgezogen wurde.
    Du hast recht damit, das es mit dem Test auf Verzeichnis- oder Dateizugriff einfacher ist und in diesem Fall auch wohl zweckmäßig.
    Damit gehts Du aber von der Annahme aus, das der einzige Grund für den fehlerhaften Zugriff auf Verzeichnis oder Datei nur das Abziehen des Sticks sein kann. Meiner Meinung nach muss das nicht sein. Mit der usb-api ist man da deutlich sicherer in der Bestimmung dee Fehlers.



  • Shiba schrieb:

    Du hast recht damit, das es mit dem Test auf Verzeichnis- oder Dateizugriff einfacher ist und in diesem Fall auch wohl zweckmäßig.
    Damit gehts Du aber von der Annahme aus, das der einzige Grund für den fehlerhaften Zugriff auf Verzeichnis oder Datei nur das Abziehen des Sticks sein kann. Meiner Meinung nach muss das nicht sein.

    Nö. Ich gehe davon aus, dass man anhand des Fehlercodes ausreichend genau unterscheiden kann was passiert.
    Das steht auch schon in meinem Beitrag von vorhin:

    Anhand des Error-Codes wird sich dann auch ermitteln lassen ob der Fehlergrund der abgezogene Stick ist (bzw. allgemeiner: das "verschwundene" Speichermedium), oder was anderes wie defekte Sektoren oder falsche Funktionsparameter.

    Ist natürlich nur eine Vermutung, aber ich denke mal der OP braucht keine 100%ige Sicherheit diesbezüglich.


Anmelden zum Antworten