Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Прочитать информацию о лог. разделах диска


Автор: Kangaroo 7.3.2009, 03:20
Всем привет!

Необходимо на С прочитать такую информацию:
- Название  (C:, D:, etc.)
- Tип файл. системы (NTFS, FAT32)
- Размер
- Стартовый сектор, общее количество секторов.


Буду благодарен за ссылки/код/любую информацию.

P.S.
Никогда этим не занимался, но хочется помочь человеку smile

Автор: vinter 7.3.2009, 09:48
Kangaroo, ты раздел перепутал, на чистом С этого не сделать.

Автор: andrew_121 7.3.2009, 17:41
vinter, А WINAPI это не С ?

Автор: vinter 7.3.2009, 23:40
andrew_121, smile QT это С++ и?

Автор: Kangaroo 8.3.2009, 23:00
Извиняюсь за долгий ответ, подписка на тему почему-то не работает.

Появилась новая информация. 
Это задание на изучение МБРа и таблицы разделов диска. То есть надо просто (просто ли это на С? smile ) прочитать таблицу разделов и распарсить всю требуемую информацию.
Я вот только не могу понять как тогда получить первый пункт - " Название  (C:, D:, etc.) ".

Такое можно сделать на С?




Автор: pan2004 8.3.2009, 23:11
Цитата(vinter @  7.3.2009,  09:48 Найти цитируемый пост)
на чистом С этого не сделать.

интересно, а где автор написал, что надо на чистом C?
И потом непонятно, на какой платформе это надо сделать. Win? *nix? Еще чтото?

Автор: Kangaroo 8.3.2009, 23:18
Цитата(pan2004 @  8.3.2009,  23:11 Найти цитируемый пост)
Win? 

На Винде ( я думал это будет понятно по примеру - названиям раздела диска).

Автор: vinter 9.3.2009, 00:05
Цитата(pan2004 @  9.3.2009,  00:11 Найти цитируемый пост)
интересно, а где автор написал, что надо на чистом C?

раздел форума тебе ни о чем не говорит?

Kangaroo, напиши в раздел WinAPI

Автор: Dmi3ev 9.3.2009, 18:29
там три справочника по АПИ на русском, советую начать с Мануал по АП, там найти GetLogicalDriveStrings, а далее сам...

Автор: andrew_121 10.3.2009, 10:54
Вот.
Код

bool get_logical_drives( std::vector<std::string>* drive_list ) {
    std::string buffer;
    std::string string;
    std::string::value_type ch;

    drive_list->clear();
    
    unsigned int size = GetLogicalDriveStringsA(0, NULL);
    if ( !size ) return false;
    
    buffer.resize(size);
    unsigned int newSize = GetLogicalDriveStringsA(size, (char*)buffer.data());

    if ( !newSize ) return false;
    if ( newSize > size ) return false;

    for ( unsigned int i = 0; i < newSize; i++ ) {
        ch = buffer.c_str()[i];
        if ( ch == '\0' ) {
            drive_list->push_back( string );
            string.clear();
        } else {
            string += ch;
        }
    }
    return drive_list->size() != 0;
}

int main() {

    std::vector<std::string> drives;
    
    bool res = get_logical_drives(&drives);
    
    if ( res && drives.size() ) {
        std::vector<std::string>::iterator iter = drives.begin();
        for ( ; iter != drives.end(); iter++ ) {
            std::cout << *iter << std::endl;
        }
    }
    
    return 0;


Автор: Kangaroo 10.3.2009, 10:58
Всем спасибо, буду разбираться. Тему эту закрываю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)