c++ ofstream write_to_log.open("相对路径+数组");

c++ ofstream write_to_log.open (" relative path + array");

我希望下面的行使用数组中给定的内容写入一个新文件 但进入名为 logs:

的新文件夹
char log_file_name[100]; /* this array contains the name of a new file */

ofstream write_to_log;
write_to_log.open (relative path, log_file_name , fstream::app); 

如何让它工作?

您可以使用 CreateDirectory 在 Windows 中使用 VC++ 创建文件夹。

#include <windows.h>
#include <string>
#include <fstream>
using namespace std;

int main() {
   string path = "C:\users\folder";
   CreateDirectory(path.c_str(), NULL);

   char log_file_name[100] = "log.txt";
   path += '\';
   path += log_file_name;
   ofstream write_to_log(path.c_str(), fstream::app);

   return 0;
}

NULL 指的是您可能必须创建的安全属性结构。 MSDN here and in this 答案中的更多详细信息。

你可以省去很多潜在的麻烦,用std::string log_file_name;替换char log_file_name[100];string的好处很多,这里最重要的是他们调整大小和追加真的很容易。字符串可以完成 char 数组所做的一切,还有很多额外功能。在几乎所有情况下,您都应该选择字符串而不是字符数组。

string path;
string log_file_name;

路径和文件名为字符串

path += "\" + log_file_name
ofstream write_to_log(path, fstream::app);
if (write_to_log)
{ // file is open and looks writable (have to start writing to be sure)
    // do stuff. Or not. It's a free country.
}
else
{ // file didn't open
    // Handle error
}

全部完成,文件(如果存在且可写)已打开并准备就绪。使用流时始终检查流的状态。 SO 充斥着那些没有问过并对结果感到困惑的人的问题。

在较旧的编译器上,您可能需要稍微更改创建和打开行:

ofstream write_to_log(path.c_str(), fstream::app);