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

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

Войти
Регистрация
Восстановить пароль
 
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
#1

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

02.02.2013, 17:55. Просмотров 943. Ответов 10
Метки нет (Все метки)

Здравствуйте.
Я новичок в этой теме, но очень интересует вопрос: Как можно при помочи С++ "добраться" до какой-то определенной директории на жестком диске и посмотреть (вывести в консоль ее содержимое), а потом удалить эти файлы и саму папку?

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

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

Я работаю с Windows7 x64, Visual Studio C++.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2013, 17:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос робота с каталогами Windows (C++):

Робота с файлами и каталогами - C++
Подскажите пожалуста как в c++ роботать с файлами,каталогами и подкаталогами?

Робота с файлами и каталогами - C++
обработка файлов и подкаталогов,вывод каталогов,подсчет количества файлов.Какими средствами c++ можно ето реализовать помогите...

Работа с каталогами - C++
как в с++ организовать копирование и перемещение каталога на указанный диск? Спасибо.

Работа с каталогами - C++
Как можно записать в массив все содержимое каталога? И по возможности отфильтровать (например записывать только файлы с расширением...

Работа с каталогами. Возникают трудности - C++
1. Написать программу, которая выводит текущий рабочий каталог. 2. Написать процедуру, которая позволяет с экрана вводить шаблон отбора...

Какими методами для работы с файлами и каталогами следует пользоваться? - C++
Недавно изучаю, C++. И в отличие от PHP, он наполнен большим количеством функций, для решения одной и той же задачи. Когда я ищу в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
02.02.2013, 19:07 #2
библиотека <Windows.h>

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

Не по теме:

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

0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,673
Записей в блоге: 17
02.02.2013, 19:50 #3
boost::filesystem как альтернатива...
0
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
03.02.2013, 05:22  [ТС] #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;
}
0
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
03.02.2013, 13:40 #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;
}
0
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
03.02.2013, 15:18  [ТС] #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 - Почему выводит название только директорий, а файлов нет?
0
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
03.02.2013, 15:49 #7
Цитата Сообщение от wi3ik Посмотреть сообщение
3 - Почему выводит название только директорий, а файлов нет?
У меня выводит и директории и файлы.

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

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

Добавлено через 2 минуты
Ну к примеру:
C++
1
2
ShowDirectory("C:\\");//отработает сначала это
ShowDirectory("D:\\");//тут будем немного попозже
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 16:24 #10
m1Rr0r, учитывая уровень владения у автора темы, не стоит ему потоки. Пусть последовательно ищет на всех дисках
1
wi3ik
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 8
07.02.2013, 14:49  [ТС] #11
Здравствуйте.
Где можно "доступно" прочесть обо все библиотеках С++ (про MSDN я уже знаю)?

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

Хотелось бы узнать их отличия и какую - когда использовать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 14:49
Привет! Вот еще темы с ответами:

Робота на 5 - C++
Пропоную зробити найкращу презентацію

Лабораторная робота! - C++
1)Написати програму, яка обчислює середню (за тиждень) температуру повітря. Початкові дані повинні вводитися під час роботи програми. Вид...

Робота со строками - C++
Ввести с клавиатуры массив строк символов с данными о клиентах банка: фамилия и проч., № счета, сумма вклада, дата. Отсортировать строки по...

перемещение робота - C++
Робот может перемещаться в четырех направлениях (&quot;С&quot; — север, &quot;3&quot; — запад. &quot;Ю&quot; — юг, &quot;В&quot; — восток) и принимать три цифровые команды: 0...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.02.2013, 14:49
Ответ Создать тему
Опции темы

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