当前位置: 首页 > 知识库问答 >
问题:

如何在创建新文件之前检查文件是否存在

阳勇
2023-03-14

我想向文件输入一些内容,但我想首先检查是否存在具有我想要创建的名称的文件。如果是这样,我不想创建任何文件,即使文件是空的。

我的尝试

bool CreateFile(char name[], char content[]){
     std::ofstream file(name);
     if(file){
         std::cout << "This account already exists" << std::endl;
        return false;
     }
     file << content;
     file.close();
     return true;
}

有什么办法可以做我想做的事吗?

共有3个答案

杜联
2023-03-14

试试吧

ifstream my_file("test.txt");
if (my_file)
{
 // do stuff
}

来自:如何检查文件是否存在并且在C中可读?

或者可以使用boost函数

田骁
2023-03-14

您也可以使用Boost。

 boost::filesystem::exists( filename );

它适用于文件和文件夹。

您将有一个接近C 14的实现,其中文件系统应该是STL的一部分(请参见此处)。

纪晨
2023-03-14

假设操作不是原子操作,则可以执行以下操作:

if (std::ifstream(name))
{
     std::cout << "File already exists" << std::endl;
     return false;
}
std::ofstream file(name);
if (!file)
{
     std::cout << "File could not be created" << std::endl;
     return false;
}
... 

请注意,如果您运行多个线程试图创建同一个文件,这是不起作用的,并且肯定不会阻止第二个进程“干扰”文件创建,因为您有TOCTUI问题。[我们首先检查文件是否存在,然后创建它-但其他人可能在检查和创建之间创建了它-如果这很关键,您将需要做其他事情,这是不可移植的]。

另一个问题是,如果您有权限,例如文件不可读(因此我们无法打开它进行读取),但可写,则会覆盖该文件。

在大多数情况下,这两件事都无关紧要,因为您所关心的只是以“尽力而为”的方式告诉某人“您已经有了这样的文件”(或类似的文件)。

 类似资料:
  • 问题内容: 如果我这样做: 然后创建文件,并始终返回“文件存在”。是否可以不创建文件就检查文件是否存在? 编辑: 我忘了提到它处于for循环中。所以这是真实的东西: 问题答案: 实例化a时,您并没有在磁盘上创建任何东西,而只是构建了一个可以调用某些方法的对象,例如。 既好又便宜,不要试图避免这种实例化。 该实例只有两个字段: 这是构造函数: 如您所见,实例只是路径的封装。创建它以便进行调用是继续进

  • 问题内容: 我正在使用Java 7 IO的新功能,实际上我试图接收文件夹的所有xml文件。但这在文件夹不存在时引发异常,如何检查新IO是否存在该文件夹? 问题答案: 使用: 您可以选择传递此方法的值: 还有一种方法:

  • 问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),

  • 我想检查文件是否存在,并尝试使用以下函数 但是,它似乎不能正常工作,因为不是检查文件的存在而是创建文件!这里有什么问题? 请注意,我被迫使用C 98标准,无法使用include

  • 问题内容: 我正在尝试使小程序以非常频繁的时间间隔(每秒几次)读取本地文件系统(用户计算机)上的文件,然后通过javascript将文件的内容提供给网页。 小程序需要读取的文件由用户计算机上的程序进行高频更新。我担心的是,如果小程序在文件正在更新的过程中从文件中读取数据,可能会发生什么。 我不知道这有多大可能,但是如果确实有问题,有没有办法在读取文件之前确保当前未将其写入文件? 问题答案: 我对此

  • 问题内容: Go的标准库没有专门用于检查文件是否存在的函数(如Python的)。什么是 惯用的 方式做到这一点? 问题答案: 要检查文件是否不存在,等同于Python的文件: 要检查文件是否存在,等效于Python的文件: 编辑:根据最近的评论