Seite 1 von 2
Alle Laufwerke ermitteln — OHNE API!
Verfasst: 26.10.2006 19:10
von AND51
Hallo!
al90 brachte mich auf die Idee, folgenden Code hier zu posten, damit alle was davon haben:
Ihr wisst ja, dass
FileSize() den Wert -2 zurückgibt, denn der übergebene Pfad in Wirklichkeit ein Ordner ist. Handelt es sich um eine Datei wird seine Größe in Bytes zurückgegeben.
Hier wird das einfach nur ausgenutzt, um Festzustellen, ob der Pfad ein Ordner (=Laufwerk) ist, oder nicht exisitiert.
Wichtiger Hinweis:
TS-Soft meint, man sollte Diskettenlaufwerke nicht testen, das könne gefährlich werden. Meine Meinung: Wer braucht schon Diskettenlaufwerke? Wer sie nicht braucht, testet von 67-90, nicht wie im Code von 65-90. Außerdem kann mit dieser Methode nicht verhindert werden, dass die Meldung "Bitte legen Sie einen Datenträger in Laufwerk X ein", erscheint. Sollte diese Meldung erscheinen, ist es mit FileSize() nicht mögoch, diese Meldung zu unterdrücken.
Glücklicherweise ist bei mir (XP, SP2) diese Meldung noch nie erschienen, bei dieser Methode.
Verfasst: 26.10.2006 19:27
von RSBasic
@AND51
Ist schon sehr gut, aber da fehlen die Buchstaben.

Verfasst: 26.10.2006 19:33
von Alves
DAnn eben so:
Code: Alles auswählen
For n=65 To 90
Debug chr(n) +"0" + FileSize(Chr(n)+":\")
Next
Verfasst: 26.10.2006 20:58
von mknjc
Das is ma was.
Auf einache Ideen kommt man also doch einfach.
Naja bin jetz aber zu faul meine Win Maschiene zu starten um zu gucken obs klappt müsste aber.
Mfg mknjc
Verfasst: 26.10.2006 21:19
von ts-soft
Das ganze funktioniert sowieso nur unter Windows, warum also keine API?
Code: Alles auswählen
For i = 0 To 25
Debug "Drive: " + Chr(i + 65)+ ": " + Str(DriveType_(i))
Next
Laufwerksbuchstaben gibts weder auf nem Mac noch unter Linux

Verfasst: 26.10.2006 22:07
von nco2k
jep, seh ich genauso, aber man sollte GetDriveType_() anstelle von DriveType_() verwenden, da DriveType_() nicht kompatibel zu win9x systemen ist.
Code: Alles auswählen
For i = 0 To 25
Debug "Drive: " + Chr(i + 65)+ ": " + Str(GetDriveType_(Chr(i + 65)+":\"))
Next
DriveType:
http://windowssdk.msdn.microsoft.com/en ... 47252.aspx
GetDriveType:
http://msdn.microsoft.com/library/defau ... vetype.asp
c ya,
nco2k
Verfasst: 26.10.2006 22:14
von ts-soft
nco2k hat geschrieben:jep, seh ich genauso, aber man sollte GetDriveType_() anstelle von DriveType_() verwenden, da DriveType_() nicht kompatibel zu win9x systemen ist.

, das kommt davon, wenn man in der MSDN nicht zuende liest.
Verspreche Besserung

Verfasst: 27.10.2006 13:32
von AND51
Danke für eure Kommentare!
In erster Linie wollte ich die Idee einfach mal posten, wozu mir al90 geraten hat. Außerdem ist diese lösung die einfachste Lösung für PureBasic-Anfänger, die ja noch keine API beherrschen oder noch nie davon gehört haben.

Re: Alle Laufwerke ermitteln — OHNE API!
Verfasst: 27.10.2006 14:29
von Ligatur
AND51 hat geschrieben:Hallo!
al90 brachte mich auf die Idee, folgenden Code hier zu posten, damit alle was davon haben:
Ihr wisst ja, dass
FileSize() den Wert -2 zurückgibt, denn der übergebene Pfad in Wirklichkeit ein Ordner ist. Handelt es sich um eine Datei wird seine Größe in Bytes zurückgegeben.
Hier wird das einfach nur ausgenutzt, um Festzustellen, ob der Pfad ein Ordner (=Laufwerk) ist, oder nicht exisitiert.
Wichtiger Hinweis:
TS-Soft meint, man sollte Diskettenlaufwerke nicht testen, das könne gefährlich werden. Meine Meinung: Wer braucht schon Diskettenlaufwerke? Wer sie nicht braucht, testet von 67-90, nicht wie im Code von 65-90. Außerdem kann mit dieser Methode nicht verhindert werden, dass die Meldung "Bitte legen Sie einen Datenträger in Laufwerk X ein", erscheint. Sollte diese Meldung erscheinen, ist es mit FileSize() nicht mögoch, diese Meldung zu unterdrücken.
Glücklicherweise ist bei mir (XP, SP2) diese Meldung noch nie erschienen, bei dieser Methode.
Ebenso einfach geht das über Droopys Lib (
http://www.purearea.net/pb/german/index.htm):
Code: Alles auswählen
MountListInit()
Repeat
mt.s = MountList()
If mt <> ""
vn.s = GetMountVolName(mt)
dt = RealDriveType(vn)
Select dt
Case #DRIVE_CDROM
ty.s = "CD Rom"
Case #DRIVE_FIXED
ty = "Festplatte / Fest eingebautes Laufwerk"
Case #DRIVE_NO_ROOT_DIR
ty = "Kein Stammverzeichnis"
Case #DRIVE_RAMDISK
ty = "Ramdisk"
Case #DRIVE_REMOTE
ty = "Netzwerklaufwerk"
Case #DRIVE_REMOVABLE
ty = "Floppy / Wechseldatenträger"
Case #DRIVE_UNKNOWN
ty = "Unbekanntes Laufwerk"
Default
ty = "Typ nicht ermittelbar"
EndSelect
MessageRequester("Laufwerk", mt + #CRLF$ + vn + #CRLF$ + ty)
EndIf
Until mt = ""
Damit kann man dann auch gefahrlos Diskettenlaufwerke ermitteln.
Gruß,
Ligatur
Verfasst: 27.10.2006 14:50
von AND51
So wie's aussieht, benutzt Droopy (bzw. einer der Autoren) in der Procedure einfach nur einen API-Aufruf. Ich kenne mich aber sleber schon gut mit API aus, sodass ich direkt darauf zugreifen kann und die Laufwerke auch ohne Hilfe durchzähle.
Droopy's Lib werde ich nicht mehr benutzen...
5 Codestücke habe ich dem Typen im April und im Juni zugesand und welche hat er in die Lib übernommen? Keine. Stattdessen sieht die Lib aus, als wäre sie notdürftig nach PB 4 transferiert worden, sogar die Schreibfehler in der Hilfe sind noch die selben...