var s: searchrec;
findfirst ('c:\*.*',VolumeID,s);
if doserror=0 then writeln(s.name);
на фри сделал так:
var s: tsearchrec;
if findfirst ('c:\*.*',faVolumeID,s)=0 then writeln(s.name);
findclose(s);
не работает.
Как надо?
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Как вывести метку диска? |
Билли Боб |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
На TP вот так работает:
на фри сделал так:
не работает. Как надо? |
IUnknown |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Цитата не работает. Не надо так категорично. Работает, но не везде: под чистым ДОС-ом (при использовании GO32v2) этот код прекрасно покажет метку диска. Во всех остальных случаях - нет. Проблема в том, что получение метки диска - операция некроссплатформенная, и для ее выполнения необходимо использовать API твоей системы. Работаешь под Windows - значит, GetVolumeInformation. А эту константу faVolumeID уже давно пора объявить deprecated, как сделали в Дельфи |
Билли Боб |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
а GetVolumeInformation под ДОСом будет работать?
|
IUnknown |
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Цитата GetVolumeInformation под ДОСом будет работать? Нет, конечно. Если нужно и там и там (и Win32 и DOS) - то можно воспользоваться условной компиляцией (если программа будет перекомпилироваться на целевой платформе, разумеется) :{$IF Defined(WIN32)} |
Билли Боб |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
Можешь написать пример использования GetVolumeInformation?
Что-то я попробовал, все равно не выводит метку. |
IUnknown |
Сообщение
#6
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Ну, например, вот так:
function GetVolumeLabel(const DriveLetter: Char): string; Проверить не могу, по причине отсутствия Windows, тестируй, если что не так - говори... |
Билли Боб |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
PChar(DriveLetter + ':\') Illegal type conversion: ShortString to ^PChar GetVolumeLabel := VolumeName; Incompatible types: got "array [0..259] of Char" expected "ShortString" |
IUnknown |
Сообщение
#8
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
{$H+}первой строкой программы, или Options -> Compiler -> Syntax -> включить Use AnsiStrings. Если этот режим отключен - то String трактуется как ShortString, что приводит к ошибкам... |
Билли Боб |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
ооотлично! работает!
|
Текстовая версия | 26.04.2024 0:31 |