【问题标题】:c++ ofstream write_to_log.open (" relative path + array");c++ ofstream write_to_log.open("相对路径+数组");
【发布时间】:2015-09-06 14:18:57
【问题描述】:

我希望下面的行使用数组中给定的内容写入一个新文件 但进入一个名为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); 

如何让它工作?

【问题讨论】:

  • 您需要一个系统调用来创建一个新文件夹。您使用的是 Windows、Linux 还是其他软件?您对使用 boost 库的解决方案感到满意吗?
  • Windows 10 64 位专业版。我忘了提到该文件夹​​已经存在。我只需要知道如何让 ofstream 使用数组中给出的内容作为文件名将文件写入该文件夹
  • 因为我在你评论之前回答了......现在你也知道如何创建文件夹作为奖励;-)

标签: c++ arrays variables ofstream


【解决方案1】:

您可以使用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 herethis 答案。

【讨论】:

  • warning: adding 'char' to a string pointer does not append to the string.
  • 我还修复了字符串连接。自我注意:在stackoveflow上发布之前使用编译器检查代码。
  • @Roddy log_file_name 从批处理生成的文件中获取其内容,该文件通过多个文件并将它们的名称一个一个复制到一个文件中。最后我希望能够为每个文件编写一个单独的日志文件,实际上这个程序只是应该将内容添加到一个日志文件中。该文件稍后由另一个程序编辑。
  • @Roddy 我假设这个 char 数组已经在他的代码中。否则建议使用 std::string。
  • 我已将 char 数组更改为字符串,我还添加了这样的路径:string patch = "\\logs";这应该可以工作,因为 exe 和日志文件夹位于同一目录中?发布错误消息的最佳方式是什么?
【解决方案2】:

您可以为自己省去很多潜在的麻烦,并将char log_file_name[100]; 替换为std::string log_file_name; string 的好处很多,这里最重要的是它们可以调整大小并且它们使附加非常容易。字符串完成了 char 数组所做的所有事情以及很多额外的事情。几乎在所有情况下,您都应该选择字符串而不是 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 到处都是来自那些没有回答的人提出的问题,并且对结果感到困惑。

在较旧的编译器上,您可能需要稍微更改 create 和 open 行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多