C++ c++;ofstream write“u to”u log.open(“相对路径和数组”);

C++ c++;ofstream write“u to”u log.open(“相对路径和数组”);,c++,arrays,variables,ofstream,C++,Arrays,Variables,Ofstream,我希望下面这行使用数组中给定的内容编写一个新文件 但进入名为日志的新文件夹中: 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++创建文

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

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;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
string path=“C:\\users\\folder”;
CreateDirectory(path.c_str(),NULL);
char log_file_name[100]=“log.txt”;
路径+=“\\”;
路径+=日志文件名;
流写入日志(path.c_str(),fstream::app);
返回0;
}

NULL
指的是您可能必须创建的安全属性结构。更多详细信息请参见MSDN和答案。

您可以为自己省去许多潜在的麻烦,并替换
char log_file_name[100]带有
std::字符串日志文件名的好处很多,这里最重要的是它们可以调整大小,并使附加变得非常容易。字符串完成了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
}
所有操作都已完成,并且该文件(如果存在且可写)已打开并准备就绪。使用流时,请始终检查流的状态。人们提出了很多问题,但他们没有回答,并且对结果感到困惑

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

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

您需要系统调用来创建新文件夹。你在使用Windows、Linux或其他什么吗?您对使用boost库的解决方案满意吗?Windows 10 64位pro。我忘了提到文件夹已经存在。我只需要知道如何让ofstream使用数组中给定的内容作为文件名将文件写入该文件夹,因为我在您发表评论之前回答了。。。现在您还知道了如何创建文件夹作为奖励;-)<代码>警告:向字符串指针添加“char”不会附加到字符串
。我还修复了字符串连接。自我提示:在stackoveflow上发布之前,请使用编译器检查代码。@Roddy日志文件名从批处理生成的文件中获取其内容,批处理会遍历多个文件并将其名称逐个复制到文件中。最后,我希望能够为每个文件编写一个单独的日志文件,实际上这个程序只应该向日志文件添加内容。该文件后来被另一个程序编辑。@Roddy我假设这个字符数组已经在他的代码中了。否则建议使用std::string。我已将char数组更改为string,还添加了如下路径:string patch=“\\logs”;因为exe和logs文件夹在同一个目录中,所以应该可以这样做吗?发布错误消息的最佳方式是什么?