Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> локальные диски 
:(
    Опции темы
Materium
Дата 9.10.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



Пдскажите пожалуйста как лучше всего и надёжнее получить список всех локальных дисков пользователя, сколько бы у него их ни было и как бы они не назывались. smile 
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
KSURi
Дата 9.10.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 5
Всего: 27



Надежней всего будет через API.

Под win32:
Код

Win32::GetNextAvailDrive()


Под никсы, без API, может быть вот это прокатит:
Код

$ls = `ls /dev`;
print $&, "\n" foreach $ls =~ /hd\w{1}\d{1}/; # /dev/hda1, etc...


Это сообщение отредактировал(а) KSURi - 9.10.2007, 23:20


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
korob2001
Дата 10.10.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Так же можно воспользоваться модулем Win32::DriveInfo, вот небольшой пртимер работы с ним:
Код

#!/usr/bin/perl -w
use strict;
use Win32::DriveInfo;

my @types = (
    "The drive type cannot be determined",
    "The root directory does not exists",
    "The drive can be removed from the drive (removable)",
    "The disk cannot be removed from the drive (fixed)",
    "The drive is a remote (network) drive",
    "The drive is a CD-ROM drive",
    "The drive is a RAM disk",
);

my @drives = Win32::DriveInfo::DrivesInUse();
print "Работающие диски: " . join(", ", @drives) . "\n";
print "=" x 80, "\n";

my @space = ();
foreach my $disk (@drives) {
        my $type = Win32::DriveInfo::DriveType($disk);
        print "$disk: " . $types[$type] . "\n";
        if ($type == 3) {
             @space = Win32::DriveInfo::DriveSpace($disk);
             print "\tNumber of sectors per cluster: $space[0]\n";
             print "\tNumber of bytes per sector: $space[1]\n";
             print "\tTotal number of free clusters on the disk: $space[2]\n";
             print "\tFree bytes on the disk that are available to the user associated with the calling thread: $space[3]\n";
             print "\tTotal number of bytes of the disk: $space[4]\n";
             print "\tTotal number of free bytes on the disk: $space[5]\n";
        }
}
print "=" x 80, "\n";
print "Не используемые буквы дисков: " . join(", ", Win32::DriveInfo::FreeDriveLetters()) . "\n";


Это сообщение отредактировал(а) korob2001 - 10.10.2007, 00:20


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Materium
Дата 13.10.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



да, усем спасибо, блин библиотеку найти не могу, CPAN что-то не открывается пока... скачать модули (((
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
Materium
Дата 14.10.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



Скачал.
Только не могу понять толком как мне библиотеки запустить\подключить. Есть Перл на машине и папка lib. Туда скопировал папку DriveInfo с DriveInfo.pm Где запускать приведённый скрипт, из папки /bin/perl или можно в другом месте, куда я скопирую файлик perl.exe? Тогда что писать в #! ? и как сделать чтобы подхватывались библиотеки. + я понял ещё нужно скачать API, так как DriveInfo его использует. Скачал. Или хотя бы скажите как перехватывать то, что пишет перл в dos-окошке, которое тут же пропадает. Я имею ввиду когда Перл пишет ошибки. 
Пробовал ещё в скрипте use lib 'C:/Perl/lib/'; не помогло. Что-то делаю не так.

--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
korob2001
Дата 14.10.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Открой командную строку и дай команду:
C:\>ppm i Win32-DriveInfo
и не нужно будет ничего качать, всё само скачается и установится.

Добавлено через 9 минут и 49 секунд
Цитата(Materium @  14.10.2007,  11:58 Найти цитируемый пост)
Скачал. Или хотя бы скажите как перехватывать то, что пишет перл в dos-окошке, которое тут же пропадает. Я имею ввиду когда Перл пишет ошибки. 

Есть 2 варианта, как сделать так, что бы окно DOS не закрывалось после выполнения программы.

1. Открой новое окно сеанса MS-DOS, Пуск->Все программы->Выполнить и дай команду cmd и нажми Enter. После перейди в каталог, в котором расположен скрипт например cd ../../myprogramm/perl и дай команду C:\myprogramm\perl>perl myscript.pl.

2. Если же хочешь запускать свои программы двойным кликом мышью, то нужно запросить пользователя ввести что нить, делается это с помощью оператора РОМБ <>. Вот пример:
Код

#!/usr/bin/perl -w
use strict;

print "This is result of my programm\n";

<>;  # Тебя в данном случае интересует эта строка

Теперь ты можешь запустить этот скрипт двойным щелчком, после окно запрашивает ввод и ожидает нажатия клавиши Enter. Т.е. теперь окно не будет закрываться до тех пор, пока ты не нажмёшь Enter.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Materium
Дата 16.10.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



Спасибо 
korob2001, про <STDIN> в скриптах я знаю. Это в случае если скрипт рабочий, а вот если он при компиляции находит то, что ему не нравится, то выдаёт ошибки, и тут ромб не поможет. А первый вариант это идея!  smile

Добавлено через 8 минут и 23 секунды
Гениально Короб2001, после команды всё скачалось и всё заработало. Вы зарабатываете ещё одно очко  smile  если есть возможность объясните что команда сделала. Так как я сам кидал папочку в lib\win32... и ничего не было. Что происходит при инсталляции, @INC хранится на диске и туда добавляется путь к модулю???
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.