Как узнать, существует тот или другой том? Например, мне нужно сделать так:
Самый простой способ - просто попробовать создать нужный файл (предварительно проверив его существование - чтоб чего не затереть случайно...)
Иначе надо использовать средства конкретной операционной системы, потому что в самом C++ такого понятия как том просто нет. Как нет его и в ряде операционных систем :)
Вот как это рекомендуется делать в Windows:
#include <stdio.h>
#include <direct.h>
#include <stdlib.h>
#include <ctype.h>
int main( void )
{
int drive, curdrive;
static char path[_MAX_PATH];
// Save current drive.
curdrive = _getdrive();
printf( "Available drives are:\n" );
// If we can switch to the drive, it exists.
for( drive = 1; drive <= 26; drive++ )
{
if( !_chdrive( drive ) )
{
printf( "%c:", drive + 'A' - 1 );
if( _getdcwd( drive, path, _MAX_PATH ) != NULL )
printf( " (Current directory is %s)", path );
putchar( '\n' );
}
}
// Restore original drive.
_chdrive( curdrive );
}
Имея поддержку c++17 (или даже c++14 с экспериментальной частью) можно использовать следующий код для проверки наличия того или иного диска, основанный на библиотеке filesystem:
#include <iostream>
#include <string>
#include <filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
for( char drive = 'a'; drive <= 'z'; ++drive )
{
fs::path p = std::string(1, drive) + ":";
std::cout << std::boolalpha << p << " - " << fs::exists(p) << "\n";
}
}
Есть очень гуманный способ:
int n;
char dd[4];
DWORD dr = GetLogicalDrives();
for( int i = 0; i < 26; i++ )
{
n = ((dr>>i)&0x00000001);
if( n == 1 ){
dd[0] = char(65+i); dd[1] = ':'; dd[2] = '\\'; dd[3] = 0;
cout << "Available disk drives : " << dd << endl;
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости