【问题标题】:I want to force file open when directory is not exist我想在目录不存在时强制打开文件
【发布时间】:2011-09-20 08:59:06
【问题描述】:

当我通过下一种方式打开文件时: ofstream outputFile(文件名, ios::out | ios::binary);

当目录不存在时我得到错误结果:

临时\文件名.ext

当目录存在时,它运行良好。 我想知道如何在 c++ 命令中强制操作

【问题讨论】:

  • 您希望如何打开一个不存在的文件?您的代码应在尝试打开文件之前检查该文件是否存在,如果不存在,则应在需要时尝试创建它。
  • 什么语言? C 还是 C++?

标签: c++ c


【解决方案1】:

你不能。在 C++ 中创建目录没有标准化的方法。
您可能想看看来自 boost 的filesystem library。有多种功能可以检查目录/文件是否存在,如果不存在如何创建它们。

【讨论】:

  • mkdir() 几乎适用于所有操作系统(尽管在 Windows 和 Linux 上的语法有点不同)。
  • @Radu: "语法有点不同" ;-) 那是我对没有标准化方式的定义。
  • 即便如此,它只是几个#ifdefs,所以实际上它尽可能接近标准:)当然,可以为它制作一个宏。
【解决方案2】:

如果文件不存在,则在创建ofstream 时自动创建该文件。但是您要创建此文件的目录必须已经存在。

在 C++ 中无法自动创建目录。您必须在 C++ 中创建目录。

此外,不幸的是,没有处理目录的 C++ 标准方法。您必须恢复到操作系统的 C 系统库 mkdir 才能创建它。

【讨论】:

  • mkdir 是 linux 文件系统应用程序。我需要用于 linux 和 windows 的 c++ 或 c 函数。如您所知,我的应用程序是跨平台应用程序
  • 在 Windows 上,Visual C++ 的 C 运行时提供了函数_mkdir。界面简单明了。与使用全功能库相比,根据平台使用 mkdir_mkdir 宏开关是轻量级的。
【解决方案3】:

我是第一个承认我对 C 一无所知的人,但是在任何编程语言中,试图强制对不存在的文件执行打开文件操作是一件坏事!

检查您尝试打开的文件是否存在。如果没有,请创建它。如果你不能创建它,那么就优雅地失败。

【讨论】:

  • 这不是文件存在与否的问题。创建文件时目录不存在的问题。
  • 确实,您通常不会找到只创建文件的 C 或 C++ 函数(或大多数其他语言中的函数)。你打开它们;如果您打开一个不存在的文件进行读取,这是一个错误。如果您为 writing 打开一个不存在的文件,则会创建它。这就是您创建文件的方式。
猜你喜欢
  • 1970-01-01
  • 2011-01-16
  • 2019-08-02
  • 2020-01-16
  • 2010-10-17
  • 2014-08-29
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多