6

I coded in C++ on Visual Studio (Windows 10) and got this error:

#error The <experimental/filesystem> header providing std::experimental::filesystem is deprecated by Microsoft \
and will be REMOVED. It is superseded by the C++17 <filesystem> header providing std::filesystem. \
You can define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING to acknowledge that you have received this warning.

With this headers:

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <filesystem>//If I will disable it nothing happens.

#include <experimental/filesystem> //If I will disable it happens another error.
namespace fs = std::experimental::filesystem; 

using namespace std;

I've tried: #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING in the main cpp file. It didnt help.

So then I paste this code from here:

#ifdef __cpp_lib_filesystem
    #include <filesystem>
    using fs = std::filesystem;
#elif __cpp_lib_experimental_filesystem
    #include <experimental/filesystem>
    using fs = std::experimental::filesystem;
#else
    #error "no filesystem support ='("
#endif

Didn't helped too.

What is the easiest way to get out that error?

Jenia
  • 374
  • 1
  • 4
  • 15

5 Answers5

5

Add _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING to Preprocessor definitions.

Project -> Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.

This solved the issue for me.

Spark
  • 371
  • 6
  • 15
3

According to the link

C++17’s is supported. This is a completely new implementation, incompatible with the previous std::experimental version, necessitated by symlink support, bug fixes, and changes in standard-required behavior. Currently, including provides the new std::filesystem and the previous std::experimental::filesystem, and including provides only the old experimental implementation. The experimental implementation will be REMOVED in the next ABI-breaking release of the libraries.

MS abandoned 'experimental' in filesystem.

You could try to use #include <filesystem>instead of #include <experimental/filesystem> and the std::experimental::filesystem is slated for removal, this means you should use std::filesystem.

Jeaninez - MSFT
  • 3,210
  • 1
  • 5
  • 20
2

I had the same problem and then, when I removed the experimental filesystem and added:

#include <filesystem>
namespace fs = std::filesystem;

I would get the error:

namespace “std” has no member “filesystem”

The solution was to go to project properties and do as instructed in the link. VS2017: E0135 namespace "std" has no member "filesystem"

Jenia
  • 374
  • 1
  • 4
  • 15
Do0Nnie
  • 36
  • 3
2

Adding the define where necessary worked for me:

#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1;

ie.

#ifdef __cpp_lib_filesystem
    #include <filesystem>
    namespace fs = std::filesystem;
#elif __cpp_lib_experimental_filesystem
    #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1;
    #include <experimental/filesystem>
    namespace fs = std::experimental::filesystem;
#else
    #error "no filesystem support ='("
#endif
Maya
  • 421
  • 6
  • 12
1

I've been researching this same problem for weeks, and I'm using visual studio 2019 on an Unreal Engine 4 project. It's difficult to enable c++17 headers in visual studio and make them work. A lot of people online suggests using the boost library instead, but this is my attempt in using filesystem because I don't want to deal with trying to download / import external libraries, and so here's what I know...

** Before you start coding in visual studio, you should build / compile your project and see if Visual Studios needs anything set up; for me, I had to download / setup a free license with Incredibuild (there are tutorials online if someone needs to get this setup). Incredibuild is helpful and necessary to build projects in Visual Studio (at least if you're using Unreal Engine 4), but sometimes I get 1 or 2 "errors" in visual studio, but will compile in Unreal Engine 4 because those errors aren't actually errors (people say online that Incredibuild is weird, and wanted to mention that)**

1) How to enable c++17 Headers

When trying to #include which is a c++ version 17 header, it's necessary to enable c++17: Look inside the visual studio "solution explorer" to view the project files, and right-click the project itself and open "properties". Go to the "C/C++ language" tab and switch the version to c++17 (this is easy to find this online). Unless you're doing an Unreal Engine project because there is not a "C/C++ language" tab, so instead find the "NMake" tab and in the text-box to the right of "Addition Options" type in:

/std:c++17 OR /std:c++latest (Microsoft has a list I found online of others, but these are fine)

and visual studios will recognize as a header.

2) How NOT to get c++17 namespaces to work (things I've tried)

After the headers start working you can try to finally make a namespace variable:

namespace fs = std::filesystem; => ERROR: 'std does not have a namespace or class filesystem'

OR if you also #include you can try:

namespace fs = std::experimental::filesystem; OR namespace fs = std::experimental::filesystem::v1; => ERROR: 'we want you to define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING'

  • how does one fix these errors?

Online, I found that adding these lines of code to your ProjectName.Build.cs file (which can be found and edited after clicking on the file in "solution explorer") instead of the original declaration for PCHUsage:

PCHUsage = PCHUsageMode.NoSharedPCHs; PrivatePCHHeaderFile = "Folder.h"; CppStandard = CppStandardVersion.Cpp17;

this did get rid of the Errors when using std::filesystem BUT caused wayyyy more problems, and seemed harmful. After looking through other websites / possible solutions, it seems people online don't know how to actually use the filesystem library in visual studio, I've been looking for working code for weeks.

if you want to try and use the std::experimental::filesystem or std::experimental::filesystem::v1, I tried #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING, but no dice.

I'm in the same boat as you man, and it looks like you didn't get much help from the previous comments. If we can't find a solution / video tutorial online, I have a plan B. Maybe we could try and write a c++17 project using some different software, or maybe we could write a program using a different software that could be launched instead of enabling c++17 into Visual Studio; for example, if you wanted to list the files in a directory, make an executable file in your preferred other software, and launch that executable / feed it arguments from your visual studio project. That's the best I got man. I hope that sparks some creativity or whatever, but I think it's a lot more helpful than what I've seen online. Good luck to you! and I need that luck too

  • 1
    Using #include will do a couple things. – Tyler Bakeman May 12 '20 at 17:48
  • No underline errors will occur with std::filesystem nor it's methods, but the project will not build in visual studio or compile in Unreal because (std does not have a class or namespace filesystem). Using std::experimental::filesystem will compile, though underlined errors will occur when using its methods, as if all of the functionality was disabled. I've been looking for solutions online, and haven't found anything that fixes these errors. If you think std::filesystem works in visual studio (maybe its an Unreal thing), then try it yourself and post the solution. – Tyler Bakeman May 12 '20 at 18:00