简体   繁体   中英

How to read files from a directory in c++ in a platform independent way?

I have an assignment that require me to develop a program that is passed either a file name or a directory name.

if what is passed is a directory name then i have to read all the files in that directory and basically do some processing on them.

the problem is that I am using c++ and c++ out of the box doesn't really play nice with file systems without third party/system libs.

how can I read all the files from a directory without platform dependency because I am using a windows machine and the grader is using linux machine.

I tried to use filesystem and I have gcc 9.2 but it doesn't compile

it doesn't compile this file:

#include <iostream> 
#include <filesystem>

namespace fs = std::filesystem;

int main(){
    
    fs::path p("some-path");
 
}

it results in this compiler error:

testfs.cpp:4:21: error: 'filesystem' is not a namespace-name
    4 | namespace fs = std::filesystem;
      |                     ^~~~~~~~~~
testfs.cpp: In function 'int main()':
testfs.cpp:8:5: error: 'fs' has not been declared
    8 |     fs::path p("some-path");
   

filesystem::path is by far the best cross-platform solution for platforms with a compiler that supports C++17, the first to support filesystem , or a newer Standard revision.

GCC 9.2 doesn't default to compiling to the c++17 standard revision.

Force C++ 17 support by adding -std=c++17 to the command line, selecting the C++17 dialect in your IDE's Compiler option property pages, or editing the appropriate configuration file to add the option.

Examples with and without the extra compiler option: https://godbolt.org/z/Tj6car

If a C++17 or newer compiler is not available on your system, consider using boost::filesystem

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM