Laufwerk Pfade Ermitteln.. [gelöst]

Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Laufwerk Pfade Ermitteln.. [gelöst]

Beitrag von corpsman »

Guten morgen allerseits.

Ich versuche mir eine Routine zu schreiben, welche mir die Laufwerkpfade im System gibt.

Für Linux hab ich schon was im Forum gefunden ( viewtopic.php?f=10&t=438 ) und daraus das hier gemacht.

Code: Alles auswählen

Function GetDriveLetters(): TStringList;
{$IFDEF LINUX}
Var
  tmpl: TStringlist;
  i: integer;
  s: String;
{$ENDIF}
Begin
  result := TStringList.Create;
  result.clear;
{$IFDEF LINUX}
  tmpl := TStringlist.Create;
  tmpl.LoadFromFile('/etc/mtab');
  For i := 0 To tmpl.count - 1 Do Begin
    s := copy(tmpl[i], 1, pos(' ', tmpl[i]) - 1);
    If (length(s) <> 0) And (s[1] = '/') Then Begin
      result.Add(s);
    End;
  End;
  tmpl.free;
{$ENDIF}
{$IFDEF WIN32}
 
{$ENDIF}
End;


Wie ihr sehen könnt fehlt noch die Rubrik Windows, könnt ihr mir hier weiter helfen ?
Zuletzt geändert von corpsman am Do 2. Jun 2011, 09:56, insgesamt 1-mal geändert.
--
Just try it

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Laufwerk Pfade Ermitteln..

Beitrag von MAC »

Ich würde jetzt folgendes Tippen , entweder:
if DirectoryExists('C:\') then C klappt
if DirectoryExists('D:\') then C klappt

Google:
// Ich hab sie nicht wirklich durchgelesen ,nur 3 sekunden überflogen...
http://www.delphi-treff.de/tipps/system/
http://www.delphi-treff.de/tipps/system ... -ram-disk/
http://www.delphi-forum.de/topic_alle+L ... 639,0.html
http://forum.delphi-treff.de/archive/in ... 11853.html

Code: Alles auswählen

Signatur := nil;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Laufwerk Pfade Ermitteln..

Beitrag von corpsman »

*g*

da ich selbst nicht unter Windwos Entwickeln kann, oder nur schwer, sondern nur immer dafür "Compiliere" hatte ich auf eine Version gehofft, die sagen wir mal getestet wurde.

Code: Alles auswählen

For i := 'A' To 'Z' Do Begin
    s := chr(i) + ':' + PathDelim;
    If DirectoryExists(s) Then Begin
      result.add(s);
    End;
  End;


ist mit sympatisch, und würde für meine Zwecke Reichen, ist es dann unter win tatsächlich so dass es nur Laufwerke "A" bis "Z" gibt ? oder sind da noch andere Möglich ?
--
Just try it

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Laufwerk Pfade Ermitteln..

Beitrag von MAC »

Windows eben :D

Ja , es sollte nur diese geben...

Scheint übrigenz zu funktionieren.

Nur wenn i:char ist, dann muss die eine Zeile folgendermaßen lauten (ohne chr(i))

Code: Alles auswählen

s := i + ':' + PathDelim;

Code: Alles auswählen

Signatur := nil;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Laufwerk Pfade Ermitteln..

Beitrag von corpsman »

*g* ne i ist int, hier die "Fertige" version.

Code: Alles auswählen

Function GetDriveLetters(): TStringList;
Var
  i: integer;
  s: String;
{$IFDEF LINUX}
  tmpl: TStringlist;
{$ENDIF}
Begin
  result := TStringList.Create;
  result.clear;
{$IFDEF LINUX}
  tmpl := TStringlist.Create;
  tmpl.LoadFromFile('/etc/mtab');
  For i := 0 To tmpl.count - 1 Do Begin
    s := copy(tmpl[i], 1, pos(' ', tmpl[i]) - 1);
    // Es ist eine Platte die Eingehängt ist
    If (length(s) <> 0) And (s[1] = '/') Then Begin
      // Nun muss noch der Link Name Extrahiert werden
      s := trim(copy(tmpl[i], length(s) + 1, length(tmpl[i])));
      s := copy(s, 1, pos(' ', s) - 1);
      If DirectoryExistsUTF8(s) Then Begin
        result.add(s);
      End;
    End;
  End;
  tmpl.free;
{$ENDIF}
{$IFDEF WIN32}
  For i := ord('A') To ord('Z') Do Begin
    s := chr(i) + ':' + PathDelim;
    If DirectoryExistsUTF8(s) Then Begin
      result.add(s);
    End;
  End;
{$ENDIF}
End;
--
Just try it

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Laufwerk Pfade Ermitteln.. [gelöst]

Beitrag von MAC »

Bei mir funktioniert es übrigenz auch wenn i vom typ char ist ;D

Code: Alles auswählen

Signatur := nil;

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Laufwerk Pfade Ermitteln..

Beitrag von af0815 »

corpsman hat geschrieben:ist mit sympatisch, und würde für meine Zwecke Reichen, ist es dann unter win tatsächlich so dass es nur Laufwerke "A" bis "Z" gibt ? oder sind da noch andere Möglich ?


Jaein, es gibt auch unter Windows die Möglichkeit Laufwerke (genauer Partitionen) in den Tree zu hängen anstatt dafür Laufwerksbuchstaben zu verwenden. Ich nehme an 99,99 % der User kennen die Möglichkeit gar nicht :-) Es ist auch früher nur mit den 'größeren' Windowsversionen (WinNT) möglich gewesen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Laufwerk Pfade Ermitteln.. [gelöst]

Beitrag von corpsman »

Ich brauche die Routine um in einem Suchendialog dem User alle Festplatten vor zu schlagen. Zusätzlich gibt es noch einen Selekt Dir Dialog. Prinzipiell ist es zwar blöd dass die Routine nicht 100% liefert, aber für meine Zwecke ist es ausreichend *g*
--
Just try it

Antworten