如何使用 std::filesystem 创建名称中带点的文件夹?
How to create a folder with a dot in the name using std::filesystem?
需要创建一个名为“.data”的 Windows 目录。但是当尝试通过 std::filesystem:create_directory / create_directories 创建此路径时,会在上面的目录中创建一个名称不明确的文件夹:
E:\n¬6Љ
P.S in the documentation for std::filesystem i found: dot: the file name consisting of a single dot character . is a directory name that refers to the current directory
我的代码:
ifstream Myfile;
string line;
char patht[MAX_PATH];
Myfile.open("dirs.lists");
if (Myfile.is_open())
{
while (!Myfile.eof())
{
while (std::getline(Myfile, line))
{
sprintf(patht, "E:\game\%s", line);
std::filesystem::create_directories(patht);
}
}
}
和dirs.lists包含:
game\modloader\.data
game\modloader\.profiles
您正在将 line
的地址传递给 sprintf
,而不是字符串!
尝试sprintf(patht, "E:\game\%s", line.c_str());
您正在将 std::string
传递给 sprintf
,您需要添加 c_str()
。
没有理由首先使用sprintf
,使用std::filesystem::path
:
#include <filesystem>
#include <fstream>
#include <string>
int main() {
std::ifstream Myfile("dirs.lists");
std::string line;
std::filesystem::path root = "E:\game";
while (std::getline(Myfile, line))
{
std::filesystem::create_directories(root / line);
}
}
需要创建一个名为“.data”的 Windows 目录。但是当尝试通过 std::filesystem:create_directory / create_directories 创建此路径时,会在上面的目录中创建一个名称不明确的文件夹:
E:\n¬6Љ
P.S in the documentation for std::filesystem i found: dot: the file name consisting of a single dot character . is a directory name that refers to the current directory
我的代码:
ifstream Myfile;
string line;
char patht[MAX_PATH];
Myfile.open("dirs.lists");
if (Myfile.is_open())
{
while (!Myfile.eof())
{
while (std::getline(Myfile, line))
{
sprintf(patht, "E:\game\%s", line);
std::filesystem::create_directories(patht);
}
}
}
和dirs.lists包含:
game\modloader\.data
game\modloader\.profiles
您正在将 line
的地址传递给 sprintf
,而不是字符串!
尝试sprintf(patht, "E:\game\%s", line.c_str());
您正在将 std::string
传递给 sprintf
,您需要添加 c_str()
。
没有理由首先使用sprintf
,使用std::filesystem::path
:
#include <filesystem>
#include <fstream>
#include <string>
int main() {
std::ifstream Myfile("dirs.lists");
std::string line;
std::filesystem::path root = "E:\game";
while (std::getline(Myfile, line))
{
std::filesystem::create_directories(root / line);
}
}