Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
#1

Открыть директорию - C++

23.07.2012, 12:21. Просмотров 1110. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток. Подскажите пожалуйста функцию для того чтобы прочитать директорию.
Т.е есть папка и мне нужно получить все названия вложений(файлов и папок).Я использую VS2010 компилятор Microsoft, ОС Windows 7. Прочитал в википедии что функция opendir с Microsoft компилятором не работает.Подскажите пожалуйста кто знает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 12:21     Открыть директорию
Посмотрите здесь:

Как создать директорию? - C++
А как создать директорию? Заранее благодарен...

Как создать директорию? - C++
Достала вся эта путаница со строками, когда пишешь то ли на С или С++ или С#, я вообще без понятия... Такую кашу наделал: #include...

Узнать директорию пользователя - C++
А вот ещё один вопрос. В C++ чтобы указать директорию пользователя надо писать ~?

Вывести текущую директорию - C++
Вывести текущую директорию. Как?

Не удается удалить директорию - C++
Пытаюсь написать функцию, удаляющую директорию со всеми ее вложенными папками и файлами. Специально для этого завел директорию. В ней...

Перемещение файла в другую директорию - C++
В C++ есть ф-ция MoveFile(), значения которой соответствует изначальное расположения файла, который нам нужно переместить и место, куда нам...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
23.07.2012, 12:28     Открыть директорию #2
stawerfar, здесь посмотрите, например. http://msdn.microsoft.com/en-us/libr...00(VS.85).aspx
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
23.07.2012, 12:31     Открыть директорию #3
Если хочешь получить названия вложений какой-то директории, то
C++
1
system("dir <path>");
Вместо <path> напиши путь до нужной директории.Например, "dir C:\\Program Files\\".
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
23.07.2012, 15:53     Открыть директорию #4
Вот тебе все вложения, компилить g++

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
//Код не мой, а некоего Юры, я его шлифанул
#include <windows.h>
#include <stdio.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath);
 
int main(){
 
        //Сюда напиши имя папки:
        char sPath[MAX_PATH]= "E:\\vso_moio";
        GetFileList(sPath);
      printf("rez= %d\n", rez);
      getchar (); 
}
 
void GetFileList(LPTSTR sPath) {
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
     
 
 
     strcat(sPath,pFILEDATA.cFileName);
     strcat(sPath, "\\");
     CharToOem(sPath,sPath);
     sPath[strlen(sPath)- 1]= '\0'; 
     printf("\n==%s\n",sPath);
     rez++;
     OemToChar(sPath,sPath);
 
     GetFileList(sPath);
 
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
 
   }
   else {
      CharToOem(sPath,sPath);
      printf("%s",sPath);
      OemToChar(sPath,sPath);
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 16:11     Открыть директорию
Еще ссылки по теме:

Указать директорию компиляции в code::blocks - C++
Всем доброго времени суток! Недавно скачал code::blocks, никак немогу разобраться есть ли функция указать компилятору куда сохранять...

Задача на строки: Вывести директорию файла. - C++
Задача: из полного адреса файла выделить его основную директорию. Если файл находится в корневой директории, вывести символ &quot;\&quot;. Считать...

Определить в какую директорию установлена Windows, и версию ОС - C++
Определить в какую директорию установлена Windows, и версию ОС. Должно совпасть с этим

Перемещение программы при запуске в системную директорию - C++
Здравствуйте программисты. Как сделать так что-бы при запуске программы exe файл (запущеной программы) переместился в системную директорию...

Как указать директорию для динамических библиотек - C++
Проблема в том, что заюзав кучу динамических библиотек, 20 файлов лежат у меня в директории выходной программы. Хотелось бы их в папочку...

Как записать dll из ресурсов в нужную директорию? - C++
Привет!) Как можно записать .длл из ресурсов на ПК в нужную директорию?


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

Или воспользуйтесь поиском по форуму:
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.07.2012, 16:11  [ТС]     Открыть директорию #5
Всем большое спасибо! Разобрался с тем как отображать содержимое директории. Нашел оптимизированную библиотеку dirent.h под win32.
Но возник другой вопрос: как определить с чем я имею дело, с файлом или с папкой. Проще говоря подскажите мне кто знает как имея название начальной директории вывести на экран все её содержимое, для каждой папки и подпапок?

Добавлено через 8 минут
Спасибо большое kravam за предоставленный код. Вот только я боюсь мне он будет мало полезен. Мне нужно использовать такие апишки что бы на линухе и винде работало! Ну естественно за исключением что копиляторы будут разные но код меняться не должен
.
Yandex
Объявления
23.07.2012, 16:11     Открыть директорию
Ответ Создать тему
Опции темы

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