Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
бах-бах и в продакшен!
3036 / 1640 / 573
Регистрация: 23.09.2014
Сообщений: 5,103
Записей в блоге: 4
1

MinGW_GCC8.2 Проблемы с компиляцией std::filesystem

19.02.2019, 22:07. Показов 2156. Ответов 6

Компилятор я взял от сюда:
https://nuwen.net/mingw.html
Исходный проект отсюда:
https://github.com/sol-prog/cpp17-filewatcher
блог авторов проекта:
https://solarianprogrammer.com... r-monitor/

эти же исходники с гитхаба тут:
h
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
#pragma once
 
#include <filesystem>
#include <chrono>
#include <thread>
#include <unordered_map>
#include <string>
#include <functional>
 
// Define available file changes
enum class FileStatus {created, modified, erased};
 
class FileWatcher {
public:
    std::string path_to_watch;
    // Time interval at which we check the base folder for changes
    std::chrono::duration<int, std::milli> delay;
 
    // Keep a record of files from the base directory and their last modification time
    FileWatcher(std::string path_to_watch, std::chrono::duration<int, std::milli> delay) : path_to_watch{path_to_watch}, delay{delay} {
        for(auto &file : std::filesystem::recursive_directory_iterator(path_to_watch)) {
            paths_[file.path()] = std::filesystem::last_write_time(file);
        }
    }
 
    // Monitor "path_to_watch" for changes and in case of a change execute the user supplied "action" function
    void start(const std::function<void (std::string, FileStatus)> &action) {
        while(running_) {
            // Wait for "delay" milliseconds
            std::this_thread::sleep_for(delay);
 
            // Check if one of the old files was erased
            for(auto &el : paths_) {
                if(!std::filesystem::exists(el.first)) {
                    action(el.first, FileStatus::erased);
                    paths_.erase(el.first);
                }
            }
 
            // Check if a file was created or modified
            for(auto &file : std::filesystem::recursive_directory_iterator(path_to_watch)) {
                auto current_file_last_write_time = std::filesystem::last_write_time(file);
 
                // File creation
                if(!contains(file.path())) {
                    paths_[file.path()] = current_file_last_write_time;
                    action(file.path(), FileStatus::created);
                // File modification
                } else {
                    if(paths_[file.path()] != current_file_last_write_time) {
                        paths_[file.path()] = current_file_last_write_time;
                        action(file.path(), FileStatus::modified);
                    }
                }
            }
        }
    }
private:
    std::unordered_map<std::string, std::filesystem::file_time_type> paths_;
    bool running_ = true;
 
    // Check if "paths_" contains a given key
    // If your compiler supports C++20 use paths_.contains(key) instead of this function
    bool contains(const std::string &key) {
        auto el = paths_.find(key);
        return el != paths_.end();
    }
};



cpp
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
// Compilation example for GCC (v8 and up) and Clang (v7 and up):
// g++ -std=c++17 -Wall -pedantic test_fs_watcher.cpp -o test_fs_watcher -lstdc++fs
// clang++ -std=c++17 -stdlib=libc++ -Wall -pedantic test_fs_watcher.cpp -o test_fs_watcher -lc++fs
 
#include <iostream>
#include "FileWatcher.h"
 
int main() {
    // Create a FileWatcher instance that will check the current folder for changes every 5 seconds
    FileWatcher fw{"./", std::chrono::milliseconds(5000)};
 
    // Start monitoring a folder for changes and (in case of changes)
    // run a user provided lambda function
    fw.start([] (std::string path_to_watch, FileStatus status) -> void {
        // Process only regular files, all other file types are ignored
        if(!std::filesystem::is_regular_file(std::filesystem::path(path_to_watch)) && status != FileStatus::erased) {
            return;
        }
 
        switch(status) {
            case FileStatus::created:
                std::cout << "File created: " << path_to_watch << '\n';
                break;
            case FileStatus::modified:
                std::cout << "File modified: " << path_to_watch << '\n';
                break;
            case FileStatus::erased:
                std::cout << "File erased: " << path_to_watch << '\n';
                break;
            default:
                std::cout << "Error! Unknown file status.\n";
        }
    });
}



При компиляции выскакивают ошибки.
Может кто подскажет в чем причина?

вот что у меня выходит:
0
Миниатюры
MinGW_GCC8.2  Проблемы с компиляцией std::filesystem  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2019, 22:07
Ответы с готовыми решениями:

Ошибки линковки std::filesystem
Доброго времени суток. В общем я хотел поиграться с фишками будущего стандарта, а именно с...

std::filesystem && std::asio и пр
Пытался найти хоть какие-то сроки включения всего этого в стандарт (так же ожидается lexical_cast,...

Проблемы с компиляцией
Привет, Пытаюсь скомпилировать win32 библиотеку, при компиляции возникает следующее: ...

Проблемы с компиляцией
Фрумчане помогите ! Программа работает, но выдает ошибки при компиляции. Не могу понять что не...

6
443 / 329 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
20.02.2019, 07:46 2
Сам удивился, узнав, что у меня filesystem не компилируется, но быстрый гуглинг показал: тык

Если коротко, то добавить в параметры линкера:
Код
-lstdc++fs
"Build Finished. 0 errors, 0 warnings"
1
бах-бах и в продакшен!
3036 / 1640 / 573
Регистрация: 23.09.2014
Сообщений: 5,103
Записей в блоге: 4
20.02.2019, 08:45  [ТС] 3
Цитата Сообщение от ReDoX Посмотреть сообщение
Если коротко, то добавить в параметры линкера:
-lstdc++fs
Извините, забыл упомянуть, без -lstdc++fs даже и не пытался!
Всегда так:
C++
1
g++ -std=c++17 -Wall test_fs_watcher.cpp -o test_fs_watcher -lstdc++fs


Цитата Сообщение от ReDoX Посмотреть сообщение
"Build Finished. 0 errors, 0 warnings"
Какая версия GCC? Откуда брали? Что у вас за Ось?

Цитата Сообщение от ReDoX Посмотреть сообщение
тык
тот тред я читал перед своим постом
Там обсуждают std::experimental::filesystem + boost
0
443 / 329 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
20.02.2019, 08:59 4
Лучший ответ Сообщение было отмечено XLAT как решение

Решение

Цитата Сообщение от XLAT Посмотреть сообщение
Какая версия GCC? Откуда брали? Что у вас за Ось?
gcc (GCC) 8.2.1 20181127. Из стандартных репозиториев (testing не подключен). Arch Linux, ядро стандартное - 4.20.8

Попробовал скомпилить посредством clang (7.0.1):
Код
 clang++ main.cc test.h -std=c++17 -lstdc++fs
без ошибок

Попробуйте другой дистрибутив mingw, ну или на крайний случай студию последнюю. Если хотите, я могу ребутнуться в винду и проверить код со студией
1
бах-бах и в продакшен!
3036 / 1640 / 573
Регистрация: 23.09.2014
Сообщений: 5,103
Записей в блоге: 4
20.02.2019, 09:08  [ТС] 5
Цитата Сообщение от ReDoX Посмотреть сообщение
без ошибок
ага, спасибо.

ток щас до меня дошло:
засунул в компиль файлик:
C++
1
2
3
4
5
6
7
/// Те же ошибки!
#include <filesystem>
 
int main()
{
    return 0;
}
Те же ошибки!
Код с гитхаба нипричем.

C++
1
2
3
4
5
6
7
8
9
10
11
12
/// А здесь всё ок:
#include <iostream>
#include <chrono>
#include <thread>
#include <unordered_map>
#include <string>
#include <functional>
 
int main()
{
    return 0;
}
0
бах-бах и в продакшен!
3036 / 1640 / 573
Регистрация: 23.09.2014
Сообщений: 5,103
Записей в блоге: 4
04.05.2019, 10:14  [ТС] 6
ап,

кто может похвастать,
что скомпилил с MinGW:
C++
1
2
3
4
5
6
#include <filesystem>
 
int main()
{
    return 0;
}
под виндос???
0
бах-бах и в продакшен!
3036 / 1640 / 573
Регистрация: 23.09.2014
Сообщений: 5,103
Записей в блоге: 4
26.04.2020, 22:56  [ТС] 7
в последних версиях проблема отсутствует.
Тема закрыта.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2020, 22:56

Проблемы с компиляцией
пишу простенькую прогу, переводящую число в часы, секунды и минуты. Появляется вот это: fatal error...

Проблемы с компиляцией программы
Разработать программу, реализующую следующий набор операций с двоичными деревьями поиска: 1. поиск...

проблемы с компиляцией...
НАрод помогите!!! как мне скомпилировань написанную программу, я не имею в виду на что и куда...

Проблемы с компиляцией
Вообщем, история такая: Сегодня решил начать изучать ассемблер. Скачал masm32, установил, из папки...


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

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

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