Текущий архив: 2005.09.25;
Скачать: CL | DM;
Внизопределить буквы винчестеров Найти похожие ветки
← →
dddim (2005-07-28 12:22) [0]вот код:
uses
FileCtrl;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
function DriveExists (Drive: Byte) : boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s:string ;
b:pchar;
implementation
{$R *.dfm}
function tform1.DriveExists (Drive: Byte) : boolean;
begin
Result := Boolean (GetLogicalDrives and (1 shl Drive));
end;
procedure TForm1.Button1Click(Sender : TObject);
var Drive : byte;
begin
for Drive := 0 to 25 do
If DriveExists (Drive) then
begin
s:=chr(Drive+$41);
b:=pchar(s);
if GetDriveType(b)=8 then
ListBox1.Items.Add (Chr(Drive+$41));
end;
end;
end.
на все драйвы(флопик,винты,сидюки) выдаёт 1.
если я не ошибаюсь 1-значит диска под такой буквой нет.
← →
begin...end © (2005-07-28 13:03) [1]> dddim (28.07.05 12:22)
> if GetDriveType(b)= ...
Открываем справку по API и читаем описание функции GetDriveType, а именно -- назначение её единственного параметра:
pRootPathName
Points to a null-terminated string that specifies the root directory of the disk to return information about.
А Вы передаёте не путь к корневому каталогу, а просто букву диска. Поэтому и "выдаёт 1".
Нужно передавать в GetDriveType не b, а PChar(s + ":\").
> Result := Boolean (GetLogicalDrives and (1 shl Drive))
А вот такие эксперименты рано или поздно до добра не доведут.
Вообще для решения этой задачи я бы использовал такой код::procedure TForm1.Button1Click(Sender: TObject);
var
AllDrives: Cardinal;
I: Byte;
Ch: Char;
begin
AllDrives := GetLogicalDrives;
for I := 0 to 24 do
if (AllDrives and (1 shl I)) <> 0 then
begin
Ch := Chr(I + Ord("A"));
if GetDriveType(PChar(Ch + ":\")) = DRIVE_FIXED then
ListBox1.Items.Add(Ch)
end
end.
← →
Vasia (2005-07-28 13:07) [2]GetLogicalDrives
The GetLogicalDrives function retrieves a bitmask representing the currently available disk drives.
Return Values
If the function succeeds, the return value is a bitmask representing the currently available disk drives. Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on.
← →
Vasia (2005-07-28 13:11) [3]if GetDriveType(PChar(Ch + ":\")) = DRIVE_FIXED then
И что определили что диск не съемный и все, а если в системе несколько винтов, то как сопаставить их логическим диска? Сколько на каком винте логических дисков и их буквы?
← →
begin...end © (2005-07-28 13:16) [4]> Vasia (28.07.05 13:11) [3]
У физических дисков нет букв. И, тем более, нет корневых каталогов. А вот у логических -- есть.
И код [1] определяет именно список логических дисков на винчестерах. Что же ещё нужно-то?
← →
Vasia (2005-07-28 13:26) [5]У физических дисков нет букв. И, тем более, нет корневых каталогов. А вот у логических -- есть
согласен, а если два винта на первом логические диски с:\ и d:\ на втором e:\ ну и как из выше приведенного кода понять что диск d на первом винте а не на втором, да и вообще не понятно сколь всего винчестеров в системе. Да и DRIVE_FIXED это просто диск с несъемным носителем и это не дает гарантии что это именно винт....
← →
begin...end © (2005-07-28 13:35) [6]> Vasia (28.07.05 13:26) [5]
> а если два винта на первом логические диски с:\ и d:\
> на втором e:\ ну и как из выше приведенного кода
> понять что диск d на первом винте а не на втором
Из приведённого выше кода -- никак не понять.
Но можно посмотреть на заголовок ветки: "определить буквы винчестеров". Я понимаю это так: получить буквы логических дисков винчестеров. Требования различать, какой логический диск на каком физическом находится, я в вопросе не вижу.
← →
Vasia (2005-07-28 13:45) [7]Я понимаю это так: получить буквы логических дисков винчестеров.
Ладно бог с ним с опастовление логических и физических дисков. Смотрим MSDN что же нам возвражает сия функция GetDriveType, DRIVE_FIXED, ага смотрим что это значит: "The disk cannot be removed from the drive." - "Это диск не может быть удален из устройства" и черт подери ни чего не сказано о типе устройства, кто тебе сказал что это обязательно вент!?
Страницы: 1 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.039 c