![]() |
Festplatte /CD-Rom ohne Volumeid?
Hallo zusammen,
beim Versuch den Namen einer CD (DISK1) und einer Festplatte (SYSTEM) mit Hilfe von Findfirst/FindNext/Findclose [faAnyFile / if attrib and faVolumeID>0) auszulesen bin ich kläglich gescheitert. Auf die Protokollierung aller Dateien auf der Festplatte/CD ergab keine Datei mit dem Attrib faVolumeid (0x0008). Kann mir jemand sagen was ich falsch gemacht habe? Ach ja ich arbeite unter XP. Als "Normalbenutzer" (zu DOS-Zeiten gab es soetwas noch) Gruß K-H |
AW: Festplatte /CD-Rom ohne Volumeid?
Zitat:
|
AW: Festplatte /CD-Rom ohne Volumeid?
DOS ist lange vorbei ... in NT gibt es das nicht mehr.
![]() NTFS speichert das vermutlich wo anders, auch CDFS speichert das nicht im Dateisystem, also wohl nur im alten FAT war es dort zu finden. ![]() Tipp: > Du suchst Informationen zu einem Volume :roll: ![]() PS: Der Volume-Friendly-Name steht nicht unbedingt auf dem Datenträger, denn Windows kann den (im Explorer) angezeigen Namen auch irgendwo in der Regisrty speichern ... hab ich vorallem in Verbindung mit CD-Laufwerken (ohne CD) und bei Speicherkarten erlebt. Dort kommt man notfalls über WMI ran, falls die genannte API nicht reicht. Zitat:
|
AW: Festplatte /CD-Rom ohne Volumeid?
Zitat:
Zitat:
Zitat:
Ich war davon ausgegangen, daß mein Hinweis auf Findfirst... ausreichend war. Bei CDs könnte die TOC noch eine Quelle sein. Vielen Dank! Gruß K-H |
AW: Festplatte /CD-Rom ohne Volumeid?
Vielleicht ist das hier, dass was Du suchst
Delphi-Quellcode:
function VolumeId(const Drive: String): string;
var OldErrorMode: Integer; NotUsed, VolFlags: Cardinal; Buf: array [0..MAX_PATH] of Char; begin OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); try Buf[0] := #0; if GetVolumeInformation(PChar(Drive), Buf, sizeof(Buf), nil, NotUsed, VolFlags, nil, 0) then SetString(Result, Buf, StrLen(Buf)) else Result := ''; finally SetErrorMode(OldErrorMode); end; end; |
AW: Festplatte /CD-Rom ohne Volumeid?
Zitat:
![]() Zitat:
Also Length und nicht SizeOf. Genau durch solche Fehler entstehen die meisten vProbleme mit den APIs. - Entweder funktioniert der Code dann nicht, durch einen vermeintlich zu kleine Buffer, - oder es gibt ganz besonders schöne Speicherüberläufe, da der Buffer größer angegeben wird, als er wirklich ist. |
AW: Festplatte /CD-Rom ohne Volumeid?
Aja, danke! Ich habe meine Bibliotheken immer noch nicht komplett auf Unicode umgestellt.
|
AW: Festplatte /CD-Rom ohne Volumeid?
Wobei es ja eigentlich schon zu Ansi-Zeiten "falsch" war, auch wenn es zufällig funktioniert. :angle2:
|
AW: Festplatte /CD-Rom ohne Volumeid?
Vielen Dank für Eure Hinweise. Das hier ist jetzt dabei heraus gekommen:
Delphi-Quellcode:
Unter XP/D7 funktioniert es.
function GetVolName(Drive:char;out VolSerialNo,FileSystemName:ansistring):ansistring;
var DrivePath : Ansistring; MaximumComponentLength : DWORD; FileSystemFlags : DWORD; VolumeSerialNo : DWORD; buffer1 : array [0..MAX_PATH] of ansichar; buffer2 : array [0..MAX_PATH] of ansichar; PVolName : PChar; VolumeName : Ansistring; VolumeNameLength : integer; begin Result := ''; DrivePath := Drive + ':\'; fillchar(buffer1,Sizeof(buffer1),' '); fillchar(buffer2,Sizeof(buffer2),' '); GetVolumeInformation(PChar(DrivePath), PChar(@buffer1[0]), Length(buffer1), @VolumeSerialNo, MaximumComponentLength, FileSystemFlags, PChar(@buffer2[0]), Length(buffer2)); Result:=buffer1; VolSerialNo:=inttostr(VolumeSerialNo); FileSystemName:=buffer2; end; Ich habe übrigens keinen Datenträger mehr gefunden, der mit FindFirst und faVolumeID noch ein Ergebnis brachte (Disketten hab ich keine mehr) vielen Dank nochmal! K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz