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

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

Войти
Регистрация
Восстановить пароль
 
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
#1

Наполнение директории по условию - C++

17.11.2012, 21:21. Просмотров 312. Ответов 3
Метки нет (Все метки)

Дано два каталога, содержащих файлы *.txt и не содержащие подкаталогов. Третий заполняем сами следующим образом: нужно сравнить два каталога разницу записать в третий. Проверка проводится только для файлов *.txt.

В третий каталог нужно положить все файлы, которые есть в первом каталоге , но отсутствуют во втором.
В третий каталог нужно положить все файлы, которые есть во втором каталоге , но отсутствуют в первом.

Добавлено через 1 час 48 минут
короче что то намудрил, что даже сам запутался...)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main()
{
    WIN32_FIND_DATA f1; HANDLE hf1=FindFirstFile("C:\\WORK\\OS\\TEST\\dir1\\*.txt", &f1);
    WIN32_FIND_DATA f2; HANDLE hf2=FindFirstFile("C:\\WORK\\OS\\TEST\\dir2\\*.txt", &f2);   
    if (hf1!=INVALID_HANDLE_VALUE && hf2!=INVALID_HANDLE_VALUE) {
        do { 
            string  Path1="C:\\WORK\\OS\\TEST\\dir1\\", Path2="C:\\WORK\\OS\\TEST\\RESULT\\";
            Path1+=f1.cFileName;                Path2+=f1.cFileName;    
            string  Path3="C:\\WORK\\OS\\TEST\\dir2\\", Path4="C:\\WORK\\OS\\TEST\\RESULT\\";
            Path3+=f2.cFileName;                Path4+=f2.cFileName;
            CopyFile(Path1.c_str(),Path2.c_str(),true); CopyFile(Path3.c_str(),Path4.c_str(),true);
        }while ((FindNextFile(hf1,&f1)!=FindNextFile(hf2,&f2)) && (FindNextFile(hf2,&f2)!=FindNextFile(hf1,&f1)));      
    }
    FindClose(hf1);FindClose(hf2);
}

Помогите исправить по условию задания...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 21:21     Наполнение директории по условию
Посмотрите здесь:

Наполнение рюкзака - C++
Дан рюкзак объёма W и n предметов с объемом w и стоимостью i ci Напишите программу находящую самое ценное наполнение рюкзака, при ...

создание и наполнение массива строк - C++
стоит задача в создании массива строк с записями про учетные записи пользователей. каждое поле отделенно от предыдущего двоеточием. то есть...

Директории - C++
Люди подскажите аналоги sys/types.h и sys/stat.h в с++

Файлы в директории. - C++
Задача такова: Есть .exe программы. Лежит в папке. Нужна функция которая создаст массив или список имён файлов находящихся в данной...

Чтение директории - C++
Киньте пример на &quot;чистом&quot; C++ чтения директории. Т.е. надо прочесть директорию, записать все имена файлов и поддиректорий в массив...

Копирование директории - C++
Как реализовать полное копирование директории на freeBSD (Не используя библиотек Microsoft)? Какой наиболее оптимальный алгоритм для...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
18.11.2012, 00:45     Наполнение директории по условию #2
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
#include <iostream>
#include <set>
#include <stdexcept>
#include <memory>
#include <algorithm>
#include <string>
#include <iterator>
#include <boost/regex.hpp>
#include <boost/filesystem.hpp>
#include <windows.h>
namespace fs = boost::filesystem3;
 
void GetFileNames(std::string const& dirpath, std::set<std::string>& set)
{
    static const boost::regex reg(".+\\.txt");
    static boost::system::error_code ec;
    static std::string s;
    fs::directory_iterator ib(dirpath, ec), ie;
    if(ec)
        throw std::runtime_error(ec.message());
    for(; ib != ie; ++ib)
    {
        s = ib->path().filename().string();
        if(boost::regex_match(s, reg))
        {
            set.insert(std::move(s));
        }
    }
}
 
int main()
{
    SetConsoleOutputCP(1251);
    std::set<std::string> set1, set2, set3;
    boost::system::error_code ec;
    std::string path1("c:/Test/Test1"), path2("c:/Test/Test2"), path3("c:/Test/Test3");
    GetFileNames(path1, set1);
    GetFileNames(path2, set2);
    std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(set3, set3.begin()));
    for(auto const& fname : set3)
    {
        fs::copy(path1 + '/' + fname, path3 + '/' + fname, ec);
        if(ec)
            std::cerr << "fs::copy failed on file: " << fname << std::endl;
    }
    return 0;
}
Morfeus
9 / 9 / 1
Регистрация: 22.10.2010
Сообщений: 110
18.11.2012, 19:20  [ТС]     Наполнение директории по условию #3
не работает
ругается на это
C++
1
2
#include <boost/regex.hpp>
#include <boost/filesystem.hpp>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 20:52     Наполнение директории по условию
Еще ссылки по теме:

Листинг директории - C++
Здравствуйте! Начал изучать С++. Хочу написать консольную программу в среде Visual C++ 2008 вывода содержимого текущей директории. Из...

Поиск файлов в директории - C++
Интересно, как можно реализовать вывод всех файлов, которые есть в данной директории? Например, одного формата? Ибо сейчас, при...

Отсутствие файла директории - C++
Всем привет, пытаюсь научиться программировать в с++. Такая беда на первом задание. Исходный текст: #include &quot;stdafx.h&quot; #include...

Атрибуты для директории - C++
Всем доброго времени суток помогите мне разобратся как создавать папки/файлы с атрибутами? там скрытый, ну в таком смысле. Создаю папку при...


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

Или воспользуйтесь поиском по форуму:
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
18.11.2012, 20:52     Наполнение директории по условию #4
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
#include <iostream>
#include <set>
#include <string>
#include <stdexcept>
#include <algorithm>
#include <windows.h>
 
void GetFileNames(std::string const& dirpath, std::set<std::string>& set)
{
    static WIN32_FIND_DATAA fd;
    HANDLE hFile = FindFirstFileA((dirpath + "/*.txt").c_str(), &fd);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            set.insert(fd.cFileName);
        }
        while(FindNextFileA(hFile, &fd));
        FindClose(hFile);
    }
    else
        throw std::runtime_error("FindFirstFileA failed");
}
 
int main()
{
    try
    {
        char const* path1 = "c:/Test/Test1", *path2 = "c:/Test/Test2", *path3 = "c:/Test/Test3";
        std::set<std::string> set1, set2, set3;
        GetFileNames(path1, set1);
        GetFileNames(path2, set2);
        std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(set3, set3.begin()));
        for(auto const& fname : set3)
        {
            std::cout << fname << std::endl;
            if(!CopyFileA((std::string(path1) + '/' + fname).c_str(), (std::string(path3) + '/' + fname).c_str(), true))
            {
                std::cerr << "CopyFile failed on file: " << fname << std::endl;
            }
        }
    }
    catch(std::exception const& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }
    return 0;
}
Yandex
Объявления
18.11.2012, 20:52     Наполнение директории по условию
Ответ Создать тему
Опции темы

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