Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ndvikulov
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 11
#1

работа с файлами

14.04.2010, 17:18. Просмотров 1673. Ответов 6
Метки нет (Все метки)

подстакажите, пожалуйста, как проверить существует ли в указанной папке, папка содержащая в названии десять цифр?
проверять на существование через счетчик имена от 0000000000 до 9999999999 сами понимаете не вариант.
после проверки надо вывести имена всех папок по данной маске.
и еще вопрос. как получить список локальных дисков компьютера? желательно чтобы сидиром не показывался.

Спасибо.

Добавлено через 10 минут
может как нибудь загнать в массив вообще весь список папок и как то там уже?..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2010, 17:18
Ответы с готовыми решениями:

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt...

Работа с файлами
Помогите реализовать ф-ии сохранения и загрузки в файл. У меня есть структура ...

Работа с файлами
Здравствуйте есть задача на работу файлами, массивами Суть задачи такова...

Работа с файлами
Подскажите пожалуйста следующие несколько вещей: 1. как работать с файлами:...

Работа с файлами.
У меня возникла маленькая проблемка...пишу курсач... тема реализация игры.......

6
oxotnik
1625 / 1098 / 75
Регистрация: 21.08.2008
Сообщений: 4,617
Записей в блоге: 1
14.04.2010, 17:20 #2
Цитата Сообщение от ndvikulov Посмотреть сообщение
подстакажите, пожалуйста, как проверить существует ли в указанной папке, папка содержащая в названии десять цифр?
только 10 цифр или может быть что то типа "11111...11ааа" или аа111...111аа111"
надо бы ограничить пределы допустимого
0
ndvikulov
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 11
14.04.2010, 17:25  [ТС] #3
только цифры
0
Roma_F
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
14.04.2010, 17:29 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// cписок имён папок в указанной папке
void ListFoldersNames (AnsiString path, TStringList* List)
{
    
    TSearchRec sr;
    int iAttributes = 0;
    iAttributes |= faDirectory;
    if (FindFirst (path + "*.*", iAttributes, sr) == 0)
    {
        do
        {
            List->Add(sr.Name);
        }
        while (FindNext(sr) == 0);
 
        FindClose(sr);
    }
}
//---------------------------------------------------------------------------
"и как то там уже..."
0
oxotnik
1625 / 1098 / 75
Регистрация: 21.08.2008
Сообщений: 4,617
Записей в блоге: 1
14.04.2010, 17:32 #5
Цитата Сообщение от ndvikulov Посмотреть сообщение
только цифры
алгоритм примерно такой:
1. сканим папку на предмет подпапок
2. все имена складываем в массив
3. циклом по массиву пробегаемся и ф-ей TryStrToInt пытаемся сконвертить в число
4. если удалось, проверяем диапазон этого числа
5. если не удалось - удаляем строку из массива
0
ndvikulov
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 11
16.04.2010, 10:45  [ТС] #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vector <AnsiString> folders;
TSearchRec sr;
AnsiString path = "\\путь\\";
SetCurrentDir(path);
 
if ( FindFirst("*",faDirectory,sr)==0 )
        {
        do
        folders.push_back(sr.Name);
        while (FindNext(sr) == 0);
 
        FindClose(sr);
        }
 
for(int i=0; i<folders.size(); i++)
        {
        int fn;
        if(TryStrToInt(folders[i], fn))
                Memo1->Lines->Add(fn);
        }
сделал так. вывод в Memo только для проверки результатов. работает нормально, но чувствую что криво как то получилось. подскажите)

и вопрос из первого поста остается открытым - как получить список локальных дисков компьютера без сидирома?

Добавлено через 51 минуту
нашел получение списка дисков и их параметров:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
int n;
bool Flag;
DWORD dr = GetLogicalDrives(); // функция возвращает битовую маску
 
for(int x=0;x<26;x++) // проходимся циклом по битам
{
   n = ((dr>>x)&1); // узнаём значение текущего бита
   if(n) // если единица - диск с номером x есть
   {
      AnsiString dl = AnsiString((char)(65+x)); // получаем литеру диска
      AnsiString path = AnsiString((char)(65+x))+":\\";
 
      AnsiString out = "Диск " + dl + "\n";
 
      // здесь узнаём готово ли устройство
      WORD OldErrorMode;
      OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); // убираем показ ошибок
      bool ready = DirectoryExists(path); // пытаемcя открыть корневую директорию
      SetErrorMode(OldErrorMode); // восстанавливаем старый режим показа ошибок
 
      if (ready)
      {
         UINT drive_type = GetDriveType((dl+":\\").c_str()); // узнаём тип диска
         out += "\nТип диска: ";
         if (drive_type == DRIVE_REMOVABLE) out += "REMOVABLE";
         else if (drive_type == DRIVE_FIXED)     out += "FIXED";
         else if (drive_type == DRIVE_REMOTE)   out += "REMOTE";
         else if (drive_type == DRIVE_CDROM)     out += "CD-ROM";
         else if (drive_type == DRIVE_RAMDISK)   out += "RAMDISK";
         else out += "НЕИЗВЕСТНЫЙ_ТИП\n";
 
         // если это HDD - заприашиваем информацию о нем
         if (drive_type == DRIVE_FIXED)
         {
            unsigned __int64 FreeBytesAvailable;
            unsigned __int64 TotalNumberOfBytes;
            unsigned __int64 TotalNumberOfFreeBytes;
            char drive_label[30];
            char drive_fat[30];
            DWORD drive_sn;
            DWORD drive_name_size = sizeof(drive_label);
 
            // получаем данные о размерах
            Flag = ::GetDiskFreeSpaceEx(path.c_str(),
                           (PULARGE_INTEGER)&FreeBytesAvailable,
                           (PULARGE_INTEGER)&TotalNumberOfBytes,
                           (PULARGE_INTEGER)&TotalNumberOfFreeBytes
                           );
            if (Flag)
            {
               out += "\nСвободно на диске: " + AnsiString(TotalNumberOfFreeBytes) + "\n";
               out += "Всего на диске: " + AnsiString(TotalNumberOfBytes) + "\n";
            }
            else
            {
               out += "Ошибка в GetDiskFreeSpaceEx\n";
            }
 
            // получаем метку, серинийный номер и пр.
            Flag = GetVolumeInformation(path.c_str(),
                           drive_label,
                           sizeof(drive_label),
                           &drive_sn,
                           &drive_name_size,
                           NULL,
                           drive_fat,
                           sizeof(drive_fat)
                           );
            if (Flag)
            {
               out += "\nМетка тома: " + AnsiString(drive_label) + "\n";
               out += "Сер.номер: " + AnsiString(drive_sn) + "\n";
               out += "Файловая система: " + AnsiString(drive_fat) + "\n";
            }
            else
            {
               out += "Ошибка в GetVolumeInformation\n";
            }
         }
      }
      else
      {
         out += "НЕ ГОТОВ";
      }
      ShowMessage(out);
   }
}
0
programmeriv
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 3
12.05.2010, 14:43 #7
хочу поправить охотника
Складываем в массив только те имена папок, которые имеют длину 10.
И потом уже пытаемся её превратить в число
0
12.05.2010, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2010, 14:43

Работа с файлами
Всем привет. Нужно строки из файла записать в массив. Заранее благодарен!

Работа с файлами
void GenerateDataset(char *filename, int num) { randomize(); ...

Работа с файлами
void __fastcall TForm1::Button1Click(TObject* Sender) { AnsiString SFile,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru