Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 1
Регистрация: 29.10.2017
Сообщений: 114
1

Распараллеливание процессов: реализовать инвертирование содержимого файлов из нескольких подкаталогов

30.04.2018, 21:26. Показов 380. Ответов 5
Метки нет (Все метки)

Добрый день нужно реализовать программу инвертирования содержимого файлов из нескольких подкаталогов (каждый процесс работает со своим файлом) двумя параллельными алгоритмами:
1) с использованием сигналов и очереди сообщений;
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
 
void reverseFile(fs::path pfile, fs::path const& pdir)
{
    std::fstream ifs(pfile, std::ios::in), ofs(pdir / pfile.filename(), std::ios::out);
    if (ifs.is_open() && ofs.is_open())
    {
        std::string str{ std::istreambuf_iterator<char>{ifs.rdbuf()}, {} };
        std::reverse_copy(str.begin(), str.end(), std::ostreambuf_iterator<char>(ofs));
    }
    else
    {
        std::cerr << "Unable to open file(s): " << pfile << "  " << pdir / pfile.filename() << "\n\n";
    }
    ifs.close();
    ofs.close();
}
 
// создаём путь папки в каталоге с инвертированными файлами
fs::path newPath(fs::path const& oldPth, fs::path const& pd1, fs::path const& pd2)
{
    fs::path ret = pd2;
    auto pr = std::mismatch(oldPth.begin(), oldPth.end(), pd1.begin(), pd1.end());
 
    for (auto ib(pr.first), ie(oldPth.end()); ib != ie; ++ib)
    {
        ret /= *ib;
    }
 
    return ret;
}
 
int main()
{
    try
    {
        fs::path pd1("C:\\dir1"); // каталог с исходными файлами
        fs::path pd2("C:\\dir2"); // каталог с инвертированными файлами
        if (!fs::exists(pd2))
        {
            fs::create_directories(pd2); // может кинуть исключение
        }
        for (fs::recursive_directory_iterator ib(pd1), ie; ib != ie; ++ib) // перебираем все файлы в dir 1
        {
            if (fs::is_regular_file(ib->path())) // инвертируем каждый файл 
            {
                reverseFile(ib->path(), newPath(ib->path(), pd1, pd2));
            }
            else if (fs::is_directory(ib->path())) // создаём папку в каталоге с инвертированными файлами
            {
                fs::create_directory(newPath(ib->path(), pd1, pd2));
            }
        }
    }
    catch (std::exception const& exc)
    {
        std::cerr << "Exception: " << exc.what() << std::endl;
    }
}
0
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2018, 21:26
Ответы с готовыми решениями:

Инвертирование содержимого файлов из нескольких подкаталогов
Как можно сделать инвертирование содержимого файлов из нескольких подкаталогов? Это первая часть,...

Распараллеливание процессов: реализовать инвертирование содержимого файлов из нескольких подкаталогов
Добрый день нужно реализовать программу инвертирования содержимого файлов из нескольких...

Потоки инвертирование содержимого файлов
Как можно сделать инвертирование содержимого файлов из нескольких подкаталогов? Это первая часть,...

Поиск файлов по определённой маске в указанной папке без учёта содержимого её подкаталогов
Всем привет. Встала очередная задача, не могу самостоятельно разобраться. Ниже выложен код,...

5
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,736
01.05.2018, 08:32 2
Это WinAPI или что?
0
Эксперт С++
1592 / 924 / 777
Регистрация: 06.02.2016
Сообщений: 2,411
Записей в блоге: 29
01.05.2018, 09:36 3
nmcf,
Цитата Сообщение от nmcf Посмотреть сообщение
Это WinAPI или что?
Это filesystem C++17
http://en.cppreference.com/w/cpp/experimental/fs
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,736
01.05.2018, 10:02 4
Я про сигналы с очередями и прочее.
0
Peoples
01.05.2018, 10:04
  #5

Не по теме:

nmcf, Извиняюсь:)

0
0 / 0 / 1
Регистрация: 29.10.2017
Сообщений: 114
01.05.2018, 13:13  [ТС] 6
nmcf, как я понял они чаще все используются в Unix. Наверное не там тему создал)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2018, 13:13

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Считывание содержимого из нескольких файлов
Доброго времени суток. Поискала в более ранних темах - не нашла. Суть проблемы вот в чем: у меня...

Копирование содержимого нескольких файлов в один
Интересную вещь заметил, не встречал вроде, но если уже опубликовано можно убрать. Например...

Вывод в консоли содержимого нескольких файлов
Имеется некий код программы, необходимо чтобы данные считывались все сразу, а не при нажатии Enter...

Добавление содержимого нескольких нетипизированных файлов к первоначально пустому файлу
Реализуйте последовательное добавление содержимого нескольких нетипизированных файлов к...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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