C++ работа с файлами и папками

178
14 апреля 2018, 20:28

Изучаю озвученную тему - хочу разобраться, как просматривать/переименовывать/удалять папки. На данный момент нарыл:

  1. fstream - насколько понял, там только функционал для чтения/изменения файлов, поправьте, если не прав;
  2. direct.h - функции есть, но подозреваю, что это наследие С - уместно ли его использовать для С-плюсов? немного напрягает, что, внимание цитата: " Удалить и переименовать можно только пустую директорию";
  3. есть еще некая библиотека boost, пока не вникал что она такое...

Посоветуйте, опытные люди, куда дальше копать?

Answer 1

Чтение/запись файлов поддерживается очень давно в STL http://en.cppreference.com/w/cpp/io/basic_ifstream. Это не должно вызвать особых трудностей, а вот переименование файлов, создание каталогов и переименование каталогов, можно сделать одним из следующий способов:

  1. Поддержка файловой системы (переименование файлов, создание каталогов) в STL должна быть в C++17 стандарте(http://en.cppreference.com/w/cpp/experimental/fs).
  2. Также вы можете использовать boost Filesystem Library(https://www.boost.org/doc/libs/1_66_0/libs/filesystem/doc/index.htm). По сути fs C++17 основан на нём.
  3. Либо использовать API операционной системы. Например для Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363950(v=vs.85).aspx.
  4. Можно использовать сторонюю бибиотеку, например Qt также имеет функции для работы с каталоками и файлми, например QDir: http://doc.qt.io/qt-5/qdir.html
Answer 2

c++ до 11 стандарта точно не имел встроенных функций для работы с каталогами/папками. Есть только апи целевых платформ. То, что они "си подобны" - ничего страшного.

Сейчас появился filesystem. Его добавили в 17 стандарте, но нужно смотреть, какие компиляторы его поддерживают. (по факту - gcc только в транке - то есть, самый свежий 7.3 ещё не поддерживает, clang - даже в транке не поддерживает, 2017 студия поддерживает. Качество поддержки ещё нужно тестить).

Можно также использовать буст, в нем есть готовые обертки - https://www.boost.org/doc/libs/1_66_0/libs/filesystem/doc/index.htm

А можно не переживать, и написать свое или использовать фреймворки, тот же Qt.

READ ALSO
Winsock timeout

Winsock timeout

ЗдравствуйтеВозникла проблема при работе с Winsock - в частности, не могу выставить время таймаута коннекта

182
Последний элемент массива в js

Последний элемент массива в js

Почему в данном коде последний элемент массива который передан функции inArray( [1,2,3,4,5] ) не добавляется в массив result ? Но если в конец массива...

161
Наследование в реакт?

Наследование в реакт?

У меня есть по сути два компонента с одной и той же логикой в методе componentWillReseiveProps и в некоторых методах еще Как мне применить наследование...

129