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

робота с каталогами Windows - C++

Восстановить пароль Регистрация
 
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
02.02.2013, 17:55     робота с каталогами Windows #1
Здравствуйте.
Я новичок в этой теме, но очень интересует вопрос: Как можно при помочи С++ "добраться" до какой-то определенной директории на жестком диске и посмотреть (вывести в консоль ее содержимое), а потом удалить эти файлы и саму папку?

Пошарил по просторах интернета - результат не очень. Очень много информации, но так как я еще никогда с етим не сталкивался - не могу въехать с чего я должен начать.

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

Я работаю с Windows7 x64, Visual Studio C++.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
02.02.2013, 19:07     робота с каталогами Windows #2
библиотека <Windows.h>

функции
GetCurrentDirectory()
CreateDirectory()
SetCurrentDirectory()
RemoveDirectory()
DeleteFile()
курить исключительно MSDN описалово отличное
например
http://msdn.microsoft.com/ru-ru/libr...(v=vs.85).aspx

Не по теме:

говорящие названия фун-ий

Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
02.02.2013, 19:50     робота с каталогами Windows #3
boost::filesystem как альтернатива...
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
03.02.2013, 05:22  [ТС]     робота с каталогами Windows #4
Я попробовал написать кое-что, но вот проблема - может кто-то скажет:
1 - как инициализировать переменную szDir строкой, в которой будет сказан адрес какой-то директории, например " С:\ " или " С:\Windows "?
2 - Почему в коде, после вызова функции FindFirstFile она возвращает значение INVALID_HANDLE_VALUE?

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
#include<Windows.h>
#include<iostream>
 
using namespace std;
 
int main(int argc, char *argv)
{
    WIN32_FIND_DATA ffd;        // structure with information about the found object
    LARGE_INTEGER filesize;     //
    TCHAR szDir[MAX_PATH];      //
    size_t length_of_arg;       //
    HANDLE hFind=INVALID_HANDLE_VALUE;  //
    
    //StringCchCopy(szDir, MAX_PATH, argv[1]); 
    //StringCchCat(szDir, MAX_PATH, TEXT("\\*")); 
 
    
    // set szDir
    
 
    hFind=FindFirstFile(szDir,&ffd);
 
   if (hFind==INVALID_HANDLE_VALUE)  
   { 
      cout<<"Why this condition is TRY?\n";
      return -1;
   } 
 
   // if we are here - it means that we have some object, which may be or directory or file
 
   return 0;
}
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
03.02.2013, 13:40     робота с каталогами Windows #5
Цитата Сообщение от wi3ik Посмотреть сообщение
TCHAR szDir[MAX_PATH]; //
szDir undefined ?
Цитата Сообщение от wi3ik Посмотреть сообщение
hFind=FindFirstFile(szDir,&ffd);
Что открываешь?
Попробуй:
C++
1
szDir = "C:\\";
Добавлено через 20 минут
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
#include <windows.h>
#include <iostream>
#include <string>
#include <tchar.h>
 
using namespace std;
 
int main(int argc, char *argv)
{
    WIN32_FIND_DATA ffd;        // structure with information about the found object
    LARGE_INTEGER filesize;     //
    TCHAR szDir[MAX_PATH];      //
    size_t length_of_arg;       //
    HANDLE hFind=INVALID_HANDLE_VALUE;  //
    
    //StringCchCopy(szDir, MAX_PATH, argv[1]); 
    //StringCchCat(szDir, MAX_PATH, TEXT("\\*")); 
 
    
    // set szDir
    _tcscpy(szDir, TEXT("C:\\"));
    _tcscat(szDir, TEXT("*.*"));
    //StringCchCopy(szDir, MAX_PATH, TEXT("C:\\"));
    //szDir = "C:\\";
    
 
    hFind=FindFirstFile(szDir,&ffd);
 
   if (hFind==INVALID_HANDLE_VALUE)  
   { 
      cout<<"Why this condition is TRY?\n";
      return -1;
   }
   do  {
 
       wcout << "Filename: " << ffd.cFileName << endl;
 
   }while(FindNextFile(hFind, &ffd) != 0);
 
   // if we are here - it means that we have some object, which may be or directory or file
   FindClose(hFind);
   return 0;
}
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
03.02.2013, 15:18  [ТС]     робота с каталогами Windows #6
Добавлено через 20 минут
C++
1
2
3
4
5
    // set szDir
    _tcscpy(szDir, TEXT("C:\\"));
    _tcscat(szDir, TEXT("*.*"));
 
    //szDir = "C:\\";
Это помогло - спасибо.
Я никак не мог инициализировать переменную szDir, так как она TCHAR, а с этим типом я еще никогда ничего не делал. Знаю, что просто char можно функциями strcpy/strcat инициализировать, а со string можно было бы szDir = "C:\\";

А вот с этим никак.

Но у меня есть еще вопрос:

1 - если я хочу начать поиск не с диска "С" или "D" (их у меня два), а на двоих сразу - я могу запустить с какой-то "точки" или мне нужно будет весь диск "С" проверить, а потом переходить на следующий? Хотелось бы более универсальным код сделать, чтобы работал на ПК с другим количеством разделом.

2 - Как сделать чтобы вывело содержимое всех папок?

3 - Почему выводит название только директорий, а файлов нет?

Добавлено через 1 час 16 минут
Но у меня есть еще вопрос:

1 - если я хочу начать поиск не с диска "С" или "D" (их у меня два), а на двоих сразу - я могу запустить с какой-то "точки" или мне нужно будет весь диск "С" проверить, а потом переходить на следующий? Хотелось бы более универсальным код сделать, чтобы работал на ПК с другим количеством разделом.

2 - Как сделать чтобы вывело содержимое всех папок?

DONE 3 - Почему выводит название только директорий, а файлов нет?
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
03.02.2013, 15:49     робота с каталогами Windows #7
Цитата Сообщение от wi3ik Посмотреть сообщение
3 - Почему выводит название только директорий, а файлов нет?
У меня выводит и директории и файлы.

Цитата Сообщение от wi3ik Посмотреть сообщение
2 - Как сделать чтобы вывело содержимое всех папок?
Для рекурсивно вызывать для каждой папки поиск. То есть определить если текущий элемент является папкой, вызвать для него такую то процедуру и т.д.

Цитата Сообщение от wi3ik Посмотреть сообщение
1 - если я хочу начать поиск не с диска "С" или "D" (их у меня два), а на двоих сразу - я могу запустить с какой-то "точки" или мне нужно будет весь диск "С" проверить, а потом переходить на следующий? Хотелось бы более универсальным код сделать, чтобы работал на ПК с другим количеством разделом.
Может использовать потоки ?
В одном потоке поиск для "С", во втором "D", и т.д.
По этому вопросу нужно по гуглить...
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 15:51     робота с каталогами Windows #8
m1Rr0r, зачем потоки? 2 хэндлера просто будет и все
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
03.02.2013, 15:59     робота с каталогами Windows #9
Kgfq,
Чтобы одновременно поиск и там и там, а так получиться что сначала отработает один поиск, потом второй.
Или я что то путаю ?

Добавлено через 2 минуты
Ну к примеру:
C++
1
2
ShowDirectory("C:\\");//отработает сначала это
ShowDirectory("D:\\");//тут будем немного попозже
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 16:24     робота с каталогами Windows #10
m1Rr0r, учитывая уровень владения у автора темы, не стоит ему потоки. Пусть последовательно ищет на всех дисках
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 14:49     робота с каталогами Windows
Еще ссылки по теме:

Робота с файлами и каталогами C++

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

Или воспользуйтесь поиском по форуму:
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
07.02.2013, 14:49  [ТС]     робота с каталогами Windows #11
Здравствуйте.
Где можно "доступно" прочесть обо все библиотеках С++ (про MSDN я уже знаю)?

Например, я использовал <windows.h>, но потом наткнулся на <io.h> и переделал все под нее............так как это для меня более проще. (не нужно париться с TCHAR)

Хотелось бы узнать их отличия и какую - когда использовать
Yandex
Объявления
07.02.2013, 14:49     робота с каталогами Windows
Ответ Создать тему
Опции темы

Текущее время: 05:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru