如何在子目录中创建文本文件?
How to create a text file in subdirectory?
我需要在程序的子目录中创建一个文本文件来写入一些数据。下面的行不起作用,不会创建文件夹。即使我手动创建子文件夹,也不会创建该文件。如果没有子文件夹,此命令可以完美运行。
FILE* f;
if (fopen_s(&f, "/Sandbox/OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "//Sandbox//OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "\Sandbox\OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "\Sandbox\OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "Sandbox/OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "Sandbox\OUTPUT.txt", "w"))
return 1; // Creates a file named 'SandboxOUTPUT.txt'
如何正确编码?
我想你在 Windows 环境中工作。
如果 Sandbox
文件夹是当前目录的子目录,您应该使用 "Sandbox\OUTPUT.txt"
或 ".\Sandbox\OUTPUT.txt"
.
如果它是驱动器根目录中的文件夹,则使用 "C:\Sandbox\OUTPUT.txt"
.
换句话说,一个反斜杠需要通过另一个反斜杠进行转义。
如果您想先创建目录,请尝试:
mkdir(".\Sandbox")
或 mkdir("C:\Sandbox")
.
如果您有支持 C++17 的编译器,请使用 std::filesystem。这里介绍了一些您可以用它做的事情,应该是不言自明的,但如果有任何不清楚的地方,请提问,我会尽力澄清。
#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main() {
// create a path in an OS agnostic manner
fs::path dir_path = fs::path(".") / "Sandbox";
fs::directory_entry dir(dir_path);
if(dir.exists()) {
std::cout << dir << " already exists\n";
if(dir.is_directory() == false) {
std::cerr << "... but is not a directory\n";
return 1;
}
} else {
std::cout << "creating dir " << dir << "\n";
if(fs::create_directory(dir) == false) {
std::cerr << "failed creating " << dir << "\n";
return 1;
}
}
{
// create a path to your file:
fs::path filename = dir_path / "OUTPUT.txt";
std::cout << "creating file " << filename << "\n";
std::ofstream os(filename);
if(os)
os << "Hello world.\n";
else {
std::cerr << "failed opening " << filename << " for writing\n";
return 1;
}
}
}
我需要在程序的子目录中创建一个文本文件来写入一些数据。下面的行不起作用,不会创建文件夹。即使我手动创建子文件夹,也不会创建该文件。如果没有子文件夹,此命令可以完美运行。
FILE* f;
if (fopen_s(&f, "/Sandbox/OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "//Sandbox//OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "\Sandbox\OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "\Sandbox\OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "Sandbox/OUTPUT.txt", "w"))
return 1; // Nothing happens
if (fopen_s(&f, "Sandbox\OUTPUT.txt", "w"))
return 1; // Creates a file named 'SandboxOUTPUT.txt'
如何正确编码?
我想你在 Windows 环境中工作。
如果 Sandbox
文件夹是当前目录的子目录,您应该使用 "Sandbox\OUTPUT.txt"
或 ".\Sandbox\OUTPUT.txt"
.
如果它是驱动器根目录中的文件夹,则使用 "C:\Sandbox\OUTPUT.txt"
.
换句话说,一个反斜杠需要通过另一个反斜杠进行转义。
如果您想先创建目录,请尝试:
mkdir(".\Sandbox")
或 mkdir("C:\Sandbox")
.
如果您有支持 C++17 的编译器,请使用 std::filesystem。这里介绍了一些您可以用它做的事情,应该是不言自明的,但如果有任何不清楚的地方,请提问,我会尽力澄清。
#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main() {
// create a path in an OS agnostic manner
fs::path dir_path = fs::path(".") / "Sandbox";
fs::directory_entry dir(dir_path);
if(dir.exists()) {
std::cout << dir << " already exists\n";
if(dir.is_directory() == false) {
std::cerr << "... but is not a directory\n";
return 1;
}
} else {
std::cout << "creating dir " << dir << "\n";
if(fs::create_directory(dir) == false) {
std::cerr << "failed creating " << dir << "\n";
return 1;
}
}
{
// create a path to your file:
fs::path filename = dir_path / "OUTPUT.txt";
std::cout << "creating file " << filename << "\n";
std::ofstream os(filename);
if(os)
os << "Hello world.\n";
else {
std::cerr << "failed opening " << filename << " for writing\n";
return 1;
}
}
}