Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Sysutils::GetDiskFreeSpaceEx 
V
    Опции темы
Metalex
Дата 24.10.2011, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Получаю обьем диска и свободное место (т.е. пытаюсь получить) :
Код

void __fastcall TMainForm::DIGetDiskFreeSpaceEx(char path[2]) {
              __int64 FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes;
    wchar_t wpath[2] = {
        '\0'
    };
    swprintf(wpath, L"%S", path);
    if (Sysutils::GetDiskFreeSpaceEx(wpath, // directory name
            FreeBytesAvailable, // bytes available to caller
            TotalNumberOfBytes, // bytes on disk
            &TotalNumberOfFreeBytes // free bytes on disk
        )) {
                                          // все хорошо
                                } else {
                                          // не очень хорошо
                                }

Пытаюсь, потому что для любого диска все "не очень хорошо". Использую 2010й билдер. Путь передается правильный 100%
Где подвох?

Добавлено через 8 минут и 12 секунд
И еще дополнение по поводу GetDiskFreeSpace.
Как я прочитал, она возвращает некорректные значения для дисков больше 2 Гб. Возможно поэтому она всегда возвращает ложь?
И как разделить тогда ложь от действительного диска, но больше 2 Гб, и виртуального диска, для которого должна возвращатся ложь?
(Мне нужно получить кол-во секторов на 1 кластер)

Добавлено через 12 минут и 47 секунд
Это парадокс какой-то. Вечер парадоксов.
Только что компилирую, эти 2 работают, зато GetVolumeInformationA возвращает теперь ложь....
 smile  smile  smile 
 smile 


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
586
Дата 24.10.2011, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(Metalex @  24.10.2011,  03:09 Найти цитируемый пост)
Путь передается правильный 100%

Он у тебя не может быть правильный. Там как минимум должно быть три символа. Первый символ - буква диска, второй - двоеточие, третий - символ конца строки. А у тебя вот что:
Цитата(Metalex @  24.10.2011,  03:09 Найти цитируемый пост)
void __fastcall TMainForm::DIGetDiskFreeSpaceEx(char path[2]) 

Цитата(Metalex @  24.10.2011,  03:09 Найти цитируемый пост)
wchar_t wpath[2] = {


Это сообщение отредактировал(а) 586 - 24.10.2011, 02:48
PM   Вверх
Metalex
Дата 24.10.2011, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот функция:
Код

void __fastcall TMainForm::DIGetVolumeInformation(char path[3]) {
    char VolumeNameBuffer[100];
    char FileSystemNameBuffer[100];
    unsigned long VolumeSerialNumber;
    unsigned long * MaxComponentLength;
    unsigned long * FileSystemNameFlags;
    if (GetVolumeInformationA(
            path,
            VolumeNameBuffer, 100,
            &VolumeSerialNumber,
            MaxComponentLength,
            FileSystemNameFlags,
            FileSystemNameBuffer, 100)) {
        MainForm->GridInfo->Cells[1][2] = VolumeNameBuffer;
        MainForm->GridInfo->Cells[1][7] = VolumeSerialNumber;
        MainForm->GridInfo->Cells[1][8] = FileSystemNameBuffer;
    }
    else {
        MainForm->GridInfo->Cells[1][2] = L"Невідомий";
        MainForm->GridInfo->Cells[1][7] = L"Невідомий";
        MainForm->GridInfo->Cells[1][8] = L"Невідома";
    }
}


Вызов:
Код

              char path[3];
    path[0] = (char)(DriveComboBox->Drive);
    strcat(path, ":\\");
    // получаем серийный номер, метку и тип файловой системы
    DIGetVolumeInformation(path);



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
586
Дата 24.10.2011, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Код
void __fastcall TForm1::DIGetVolumeInformation(const char path[]) {
    char VolumeNameBuffer[100];
    char FileSystemNameBuffer[100];
    unsigned long VolumeSerialNumber;
    unsigned long MaxComponentLength;
    unsigned long FileSystemNameFlags;
    if (GetVolumeInformationA(
            path,
            VolumeNameBuffer, 100,
            &VolumeSerialNumber,
            &MaxComponentLength,
            &FileSystemNameFlags,
            FileSystemNameBuffer, 100))
    {
        MainForm->GridInfo->Cells[1][2] = VolumeNameBuffer;
        MainForm->GridInfo->Cells[1][7] = VolumeSerialNumber;
        MainForm->GridInfo->Cells[1][8] = FileSystemNameBuffer;
    }
    else {
        MainForm->GridInfo->Cells[1][2] = L"Невідомий";
        MainForm->GridInfo->Cells[1][7] = L"Невідомий";
        MainForm->GridInfo->Cells[1][8] = L"Невідома";
    }
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char path[4];
    path[0] = (char)(DriveComboBox1->Drive);
    strcpy(path+1, ":\\");
    // получаем серийный номер, метку и тип файловой системы
    DIGetVolumeInformation(path);
}


Это сообщение отредактировал(а) 586 - 24.10.2011, 11:36
PM   Вверх
Metalex
Дата 24.10.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



586, еще раз спасибо!


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Metalex
Дата 24.10.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А почему при сборке в релиз все функции возвращают ложь?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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