Entwickler-Ecke

Dateizugriff - Volum ID eines Datenträgers auslesen (CD,HD,FD) [erledigt]


smilie128 - Sa 02.11.02 20:51
Titel: Volum ID eines Datenträgers auslesen (CD,HD,FD) [erledigt]
Hi Leute

Ich habe mir diese Forum ausgiebig angeschaut und bin zu dem entschluß gekommen, daß hier fähige Leute vertreten sind :) (Kein Schleim, pure wahrheit)

Also zu meinem Problem :

Ich schreibe eine MP3-Datenbank wo die Titel automatisch gesucht und eingelesen werden sollen, daß bedeutet CD einlegen, Knopf drücken und die Titel erscheinen in der Datenbank. Ich möchte aber verhindern, daß eine CD mehrfach eingelesen wird und da jeder Datenträger, soviel ich weiß, eine einmalige ID besitzt (stimmt das überhaupt??) möchte ich die Volume-ID´s vergleichen und mit den Datensätzen abspeichern.

wäre schön wenn jemand eine einfache Lösung hat denn ich habe keine Lust immer die gesammten Files und Directories zu vergleichen

Falls es wichtig ist ich benutze Delphi 6.

Danke im Vorraus
Smilie


LCS - So 03.11.02 10:31

Hi
den Datenträgernamen und die VolumeID bekommst du mit der API-Funktion GetVolumeInformation.

Gruss Lothar


smilie128 - So 03.11.02 13:39

Moin Lothar

So weit so gut.Nur finde ich nirgenwo eine syntaxbeschreibung und
Delphi sagt mir 'not enough actual parameters' . :?
Ich weiß zwar was das heist aber ich weiß nicht welche Parameter fehlen.
Hast du eventuell ein Beispiel parat oder einen Link zu einem Beispiel?
Das Problem ist , das ich mich mit der API nicht auskenne .

Gruß
Oliver


LCS - So 03.11.02 14:17

Hi
Die Syntaxbeschreibung zu API-Funktionen findest du in der Hilfe zum Windows SDK.
Plaziere mal einen Button und vier Labels auf ein Formular und probier das hier:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  volName, fsName:  array[0..255] of char;
   serNum, maxLen, Flags  : Cardinal;
begin
   FillChar(volName, SizeOf(volName), 0);
   FillChar(fsName, SizeOf(fsName), 0);
   if  GetVolumeInformation(PChar('C:\'), volName, SizeOf(volName), @serNum, maxLen, Flags, fsName, SizeOf(fsName)) then begin
     Label1.Caption  := volName;
     Label2.Caption  := IntToHex(serNum, 8);
     Label3.Caption  := fsName;
     Label4.Caption  := 'Max. Pfadlänge: ' + IntToStr(maxLen);
   end;
end;

serNum enthält die VolumeID als Integer.

Gruss Lothar


smilie128 - So 03.11.02 14:27

Moin Lothar

:D :D :D :D :D
DAS ist genau was ich brauche
ein paar kleine änderungen sind zwar nötig aber jetzt weis
ich wies geht

besten Dank Lothar hst mir sehr geholfen


Gruß Oliver