C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Жуткие тормоза в GetVolumeInformation  (Прочитано 1183 раз)
Makin_tosh
Участник


Сказали спасибо: +4/-0
Offline

Сообщений: 156


Жуткие тормоза в GetVolumeInformation
« : 07 Октябрь 2013, 11:51:42 »

Подскажите, пожалуйста, как правильнее оформить код, а то происходят жуткие тормоза в вызове этой функции.

Код
 try {
int NumberDrive;
char DiskLabel_[MAX_PATH];
char *DiskName;
String Find_FixedPatch;
DWORD Drive = GetLogicalDrives();
Glav_Form->icoDrImageList->Clear();
for (int i = 25; i > -1; i--) {
Application->ProcessMessages();
NumberDrive = ((Drive >> i) & 0x00000001);
if (NumberDrive == 1) {
String DiskLetter = String((char)(65 + i));
String DiskPatch = String((char)(65 + i)) + ":\\";
String DiskInform;
String DiskRazmer = OpisanieDisks(DiskPatch);
DiskName = (DiskLetter + ":\\").t_str();
 
вот здесь: GetVolumeInformation(DiskName, DiskLabel_, MAX_PATH, NULL, NULL, NULL, NULL, 0);
UINT iconDr;
iconDr = GetDriveType(DiskName);
switch(iconDr) {
 case 0 : DiskInform = " диск неопределен/не существует"; break;
 case 1 : DiskInform = " неверный путь/ путь не указывает на том"; break;
 case 2 : DiskInform = " съемный"; break;
 case 3 : DiskInform = " фиксированный диск"; break;
 case 4 : DiskInform = " удаленный (сетевой) диск"; break;
 case 5 : DiskInform = " CD-ROM/DVD-ROM"; break;
 case 6 : DiskInform = " виртуальный диск, созданный в оперативной памяти"; break;
}
if (DiskRazmer != "")
Glav_Form->CreateDrButton(DiskLetter, (DiskInform + " [" + DiskRazmer + "] " + DiskLabel_));
else Glav_Form->CreateDrButton(DiskLetter, (DiskInform + " [не доступен]"));
DiskLabel_[MAX_PATH] = 0;
if (iconDr) {
int flags;
flags = SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SYSICONINDEX;
TIcon *Icon = new TIcon();
SHFILEINFO SmallImageInfo;
DWORD SmallImageHandle = SHGetFileInfo(DiskPatch.t_str(),
0,
&SmallImageInfo,
sizeof(SmallImageInfo),
flags);
if (SmallImageHandle != 0) {
Icon->Handle = SmallImageInfo.hIcon;
Glav_Form->icoDrImageList->AddIcon(Icon);
if (Icon) delete Icon;
}
}
if (fix) {
Find_FixedPatch = ExtractFileDrive(Application->ExeName);
Find_FixedPatch += "\\";
}
}
}
if (fix) {
Glav_Form->LCatalogEdit->Text = Find_FixedPatch;
Glav_Form->LStatusPanel1->Caption = OpisanieDisks(Find_FixedPatch + "\\");
Glav_Form->RCatalogEdit->Text = Find_FixedPatch;
Glav_Form->RStatusPanel1->Caption = OpisanieDisks(Find_FixedPatch + "\\");
}
return true;
}
catch(...) {
return false;
}
 
« Последнее редактирование: 07 Октябрь 2013, 13:50:17 от volvo877 » Записан
Makin_tosh
Участник


Сказали спасибо: +4/-0
Offline

Сообщений: 156


« Ответ #1 : 07 Октябрь 2013, 13:48:31 »

Она глючит, если обращаться к устройству, в котором ничего нет.
Но если я делаю

Код
bool ready = DirectoryExists(DiskName);
if (ready) {
GetVolumeInformation(DiskName, DiskLabel_, MAX_PATH, NULL, NULL, NULL, NULL, 0);
}
 
Все равно глючит. Как быть?
« Последнее редактирование: 07 Октябрь 2013, 13:50:27 от volvo877 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.138 секунд. Запросов: 19.