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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
#1

Работа с фс - C++

08.08.2012, 18:04. Просмотров 1724. Ответов 22
Метки нет (Все метки)

Всем привет, мне необходимо посчитать количество файлов в директории и в зависимости от их количества разделить их на 4 или 8 папок. Я слышала есть библиотеки fstream и boost, но как правильно это сделать я так и не поняла.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 18:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с фс (C++):

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления - C#
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

Количество подведенного и отведенного тепла, работа сжатия, работа расширения - Термодинамика и МКТ
Определить количество подведенного и отведенного тепла, работу сжатия, работу расширения, полезную работу и КПД цикла предыдущей...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием - Visual C++
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать новый/очистка). Также хочу спросить как...

Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры) - Visual Basic .NET
Как заставить это работать в фоне? Даный код работает пока форма в фокусе, как только ее отпускаем - она не реагирует. Public...

Работа с файловой системой (системное название некоторых папок и работа со скрытыми документами) - VBA
Всем привет, подскажите каким образом можно из VBA сохранить документ txt в папке "Общие документы" и задать для него свойство "скрытый"...

Нужна книга, где рассматриваются работа с прерываниями, указатели, работа с памятью, ассемблерные вставки - C (СИ)
Привет всем! Подскажите, пожалуйста, хорошую книгу по C (именно C, не C++). Интересует работа с прерываниями, указатели, работа с памятью,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
08.08.2012, 23:01  [ТС] #16
Цитата Сообщение от Jupiter Посмотреть сообщение
какая версия буста? чтоб исправить эту ошибку
это

замени на
C++
1
namespace bfs = boost::filesystem3;
Не помогло, версия буста 1.46, ставила из синаптика. Ну в смысле я весь пакет ставила, сейчас посмотрела, точно 1.46.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2012, 23:41 #17
Mari-mari, вот немного переделанный код soon
на gcc 4.6.3 vs boost 1.46 скомпилировалось
Bash
1
g++ main.cpp -std=c++0x -lboost_filesystem -lboost_system
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
#include <iostream>
#include <iterator>
#include <string>
#include <cerrno>
 
#include <boost/filesystem.hpp>
 
class directory_range
{
    typedef boost::filesystem3::directory_iterator bfs_dir_iter;
    bfs_dir_iter _itr;
 
public:
    directory_range(bfs_dir_iter&& itr): _itr(itr)
    {
    }
 
    bfs_dir_iter begin()
    {
        return _itr;
    }
 
    bfs_dir_iter end()
    {
        return bfs_dir_iter();
    }
};
 
int main()
{
    namespace bfs = boost::filesystem3;
 
    bfs::path p("/home/maxwe11/test/t");
    if(!bfs::is_directory(p))
    {
        std::cerr << "[ ERROR ] ";
        std::cerr << p << " isn't directory. Stopping...." << std::endl;
        return ENOENT;
    }
 
    const char* dirs[] = {"first", "second", "third", "fourth"};
 
    for(const auto& dir: dirs)
        try
        {
            bfs::create_directory(p / dir);
        }
        catch(const bfs::filesystem_error& e)
        {
                std::cerr   << "[ ERROR ] ";
                std::cerr   << (p / dir).filename()
                            << " is already exists and not directory. "
                            << "Stopping..." << std::endl;
                return ENOENT;
        }
 
    auto dirs_iter = std::begin(dirs);
    for(const auto& file: directory_range(bfs::directory_iterator(p)))
    {
        if(!bfs::is_regular_file(file))
        {
            std::cerr   << "[WARNING] ";
            std::cerr   << file.path().filename() << " isn't regular file. "
                        << "Go to the hell, I will not copy it." << std::endl;
        }
        else
        {
            if(bfs::exists(p / *dirs_iter / file.path().filename()))
            {
                std::cerr   << "[WARNING] ";
                std::cerr   << file.path().filename()
                            << " is already exists in " << *dirs_iter
                            << ". Skipping..." << std::endl;
                continue;
            }
 
            bfs::copy(file, p / *dirs_iter++ / file.path().filename());
            if(dirs_iter == std::end(dirs))
                dirs_iter = std::begin(dirs);
        }
    }
 
    return 0;
}
1
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
08.08.2012, 23:59  [ТС] #18
Soon, Jupiter, ребят спасибо вам огромное, очень приочень выручили.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.08.2012, 00:16 #19
soon, boost::iterator_range же.

C++
1
2
3
for (const auto& f : boost::make_iterator_range(bfs::directory_iterator(p), bfs::directory_iterator()))
{
}
Пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <sstream>
#include <iostream>
#include <iterator>
 
#include <boost/range/iterator_range.hpp>
 
int main()
{
   std::stringstream ss;
   ss << "hello";
   for (const auto& c : boost::make_iterator_range
   (std::istream_iterator<char>(ss), std::istream_iterator<char>()))
   {
      std::cout << c << std::endl;
   }
}
http://liveworkspace.org/code/608761...2c86061f66fada
2
Rels
13 / 13 / 1
Регистрация: 11.10.2011
Сообщений: 116
09.08.2012, 00:33 #20
Хм, почитал - интересно. У буста, конечно, возможности только воображением ограничены Есть вариант сборки прог без флага -std=c++0x?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.08.2012, 01:49 #21
Rels, Заменяем фичи С++11 на эквивалентные им С++03 и радуемся.
0
Rels
13 / 13 / 1
Регистрация: 11.10.2011
Сообщений: 116
09.08.2012, 21:39 #22
Цитата Сообщение от ForEveR Посмотреть сообщение
Rels, Заменяем фичи С++11 на эквивалентные им С++03 и радуемся.
Можно по-подробней про эти фичи, что именно нужно поменять?
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.08.2012, 06:37 #23
Rels, http://ru.wikipedia.org/wiki/C%2B%2B11
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2012, 06:37
Привет! Вот еще темы с ответами:

Symfony2, работа с типом Collection, работа с базовой формой - PHP
Здравствуйте. Осваиваю создание CRUD приложения на Symfony 2, на примере. Однако, возникают ошибки: 1)При модификации шаблона...

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

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки - Delphi
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о работниках и заработной плате. В первой...

Работа с INI: некорректная работа пользовательской функции - C#
Ранее нашел код для работы с ini-файлами: public class INI { /// &lt;summary&gt; /// Чтение...


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

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

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