Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Laufwerkbuchstaben auslesen (https://www.delphipraxis.net/87487-laufwerkbuchstaben-auslesen.html)

-187- 1. Mär 2007 10:59


Laufwerkbuchstaben auslesen
 
Delphi-Quellcode:
var
  Drive:Char;
begin
  for Drive := 'A' to 'Z' do
  begin
   case GetDriveType(PChar(Drive + ':/')) of
   DRIVE_FIXED: ComboBox1.Items.Add(Drive+':\');
  end;
  end;
Mit dem Code kann man die Laufwerkbuchstaben auslesen und in einer Combobox anzeigen lassen. Ich benutze aber ein Konsolen Programm und möchte die Buchstaben als eine Variable ausgeben. Ich bräuchte ja sowas wie eine Liste, was wäre hier passend?

Luckie 1. Mär 2007 11:18

Re: Laufwerkbuchstaben auslesen
 
Dann schreib die Laufwerksbuchstaben doch mit Delphi-Referenz durchsuchenWrtieln in die Konsole.

-187- 1. Mär 2007 11:21

Re: Laufwerkbuchstaben auslesen
 
möchte sie nich in der console haben, möchte sie als variable sodass eien prozedur mit den vorhandenen laufwerken arbeiten kann

Matze 1. Mär 2007 11:22

Re: Laufwerkbuchstaben auslesen
 
Nimm doch ein Array.

Luckie 1. Mär 2007 11:22

Re: Laufwerkbuchstaben auslesen
 
Na dann sichere sie in einem Array und übergib das Array der Funktion.

-187- 1. Mär 2007 11:30

Re: Laufwerkbuchstaben auslesen
 
Hm ok hab ich auch noch nich mit gearbeitet, werd das mal versuchen das wird wohl sowas sein:

Delphi-Quellcode:
var
  HDD: Array[1..3] of Byte;
  Drive:Char;
begin
  for Drive := 'A' to 'Z' do
  begin
   case GetDriveType(PChar(Drive + ':/')) of
   DRIVE_FIXED: HDD:=(Drive+':\');

Matze 1. Mär 2007 11:42

Re: Laufwerkbuchstaben auslesen
 
Bei dir wären Hier im Forum suchendynamische Arrays das richtige, da du von vornherein keine feste Größe zuweisen kannst, weil du nicht weißt, wie viele Laufwerke es gibt. Aber dazu steht im Forum sehr viel.
Im Notfall kannst du auch eine feste Größe von 24 zuweisen und dann von Low() bis High() arbeiten, doch das finde ich keine schöne Lösung.

-187- 1. Mär 2007 11:58

Re: Laufwerkbuchstaben auslesen
 
Habe jetzt folgenden Code gefunden:

Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
  System.IO;

var
  Drives : Array of String;
  i     : Integer;

begin
  // Get the logical drives on this machine
  Drives := System.IO.Directory.GetLogicalDrives;

  // Display them
  for i := 0 to Length(Drives)-1 do
    Console.WriteLine(Drives[i]);

  Console.Readline;
end.
Dafür brauch ich aber die System.IO.dcu. Wo krieg ich die her und wie initialisiere ich die in Delphi?

MFG

Klaus01 1. Mär 2007 12:00

Re: Laufwerkbuchstaben auslesen
 
System.IO ist .Net oder nicht?

Vielleicht ist der Code besser, arbeitet mit einer StringList.

Gruesse
Klaus

DP-Maintenance 1. Mär 2007 12:27

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Hier gehts um Delphi

-187- 1. Mär 2007 12:35

Re: Laufwerkbuchstaben auslesen
 
Hm also den versteh ich nicht. Würde gern mit dem Code weiterarbeiten:

Delphi-Quellcode:
var
  Drive:Char;
begin
  for Drive := 'A' to 'Z' do
  begin
   case GetDriveType(PChar(Drive + ':/')) of
   DRIVE_FIXED: ComboBox1.Items.Add(Drive+':\');
  end;
  end;
Aber ich weiss nich wie ich das in ein Array speichere und als Variable weiter verwenden kann :/

sakura 1. Mär 2007 12:43

Re: Laufwerkbuchstaben auslesen
 
Es kann mit all den genannten Stichworten doch nicht so schwer zu sein, sich ein bisschen damit zu befassen oder :shock: Wir haben alle mal angefangen...
Delphi-Quellcode:
var
  Drive: Char;
  Drives: array of string;
  Idx: Integer;
begin
  SetLength(Drives, 0);
  Idx := 0;
  for Drive := 'A' to 'Z' do
  begin
    if GetDriveType(PChar(Drive + ':/')) = DRIVE_FIXED then
    begin
      SetLength(Drives, Idx + 1);
      Drives[Idx] := Drive + ':\';
      Idx := Idx + 1;
    end;
  end;

  if Length(Drives) > 0 then
    for Idx := Low(Drives) to High(Drives) do
      WriteLn(Drives[Idx]);
end;
...:cat:...

-187- 1. Mär 2007 13:07

Re: Laufwerkbuchstaben auslesen
 
Ich weiss nicht ob du das getestet hast aber bei mir kommt folgender Fehler:

Delphi-Quellcode:
..
....
.....
  if Length(Drives) > 0 then
    for Idx := Low(Drives) to High(Drives) do
      WriteLn(Drives[Idx]);
end;

var blabla
. erwartet aber ; gefunden.. :/

...das Programm darf an dieser Stelle nich zuende sein =)

p0w3r5tr34m3r 1. Mär 2007 13:09

Re: Laufwerkbuchstaben auslesen
 
Zitat:

Zitat von -187-
Ich weiss nicht ob du das getestet hast aber bei mir kommt folgender Fehler:

Delphi-Quellcode:
..
....
.....
  if Length(Drives) > 0 then
    for Idx := Low(Drives) to High(Drives) do
      WriteLn(Drives[Idx]);
end;

var blabla
Anweisung erwartet aber var gefunden.. :/

dann nimm mal das var blabla raus

-187- 1. Mär 2007 13:11

Re: Laufwerkbuchstaben auslesen
 
Hab mein Beitrag nochma editiert. Der Fehler kommt:

. erwartet aber ; gefunden..

Das Programm geht ja noch weiter ich kann da kein end. hinsetzen...


Hier nochma der Code

Delphi-Quellcode:
....
....
  if Length(Drives) > 0 then
    for Idx := Low(Drives) to High(Drives) do
      WriteLn(Drives[Idx]);
end;
//

////Get System Directory Function
function GetSysDir: String;
var
  Dir : array [0..MAX_PATH+1] of Char;
begin

bitsetter 1. Mär 2007 16:53

Re: Laufwerkbuchstaben auslesen
 
Hallo,

also ich habe das Problem etwas anders gelöst, für dein 'A'..'Z' kannst du auch die Funktion GetLogicalDriveStrings() nehmen. Folgendes funktionierte jedenfalls bei mir:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  Windows;

var
  Drives: Array of Array[0..3] of Char;
  i: integer;
begin
  SetLength(Drives, 26);
  SetLength(Drives, GetLogicalDriveStrings(length(Drives), @Drives[0]) div 4);

  for i:= Low(Drives) to High(Drives) do
  if GetDriveType(PChar(String(Drives[i])))= DRIVE_FIXED then
    system.Writeln(String(Drives[i]));
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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