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:

Code: Alles auswählen

For n=65 To 90 
   Debug FileSize(Chr(n)+":\") 
Next
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. :D

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 :wink:

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.
:oops: , das kommt davon, wenn man in der MSDN nicht zuende liest.
Verspreche Besserung :wink:

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. :D

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:

Code: Alles auswählen

For n=65 To 90 
   Debug FileSize(Chr(n)+":") 
Next
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... :twisted: 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... :freak: