gpt4 book ai didi

C++ ifstream 尝试在写入时打开文件

转载 作者:行者123 更新时间:2023-11-30 03:02:24 24 4
gpt4 key购买 nike

我不断地轮询目录中的文件,每次看到满足某些特定读取条件的文件时,我都会打开该文件并对其进行解析。

string newLine;

ifstream fileReader;

fileReader.open(filename.c_str());

while(!fileReader.eof())
{
getline(fileReader, newLine);
// do some stuff with the line...
}
filereader.close();

上面的代码在一个循环中,每 1 秒运行一次,检查目录中是否有新文件。我的问题是,当我将文件传输到文件夹中进行处理时,我的循环找到了文件并将文件的名称传递给 ifstream,然后 ifstream 打开它并尝试解析不完整的文件。如何让 ifstream 等到文件写入完成后再尝试解析文件?

编辑:想在这里更好地表达这个问题,因为回复者似乎误解了我的问题。我有 2 个目录

mydirectory/
mydirectoryParsed/

我的代码的工作方式是我的程序检查 mydirectory/中的文件,当它找到它们时,解析它们并使用文件中的信息。没有写入文件。完成文件解析后,文件将移至 mydirectoryparsed/

问题是,当我通过网络将文件传输到 mydirectory/时,ifstream 会在传输过程中看到这些文件,并在它们完成写入目录之前开始读取它们。如何让 ifstream 等到文件完全写入后再解析?

最佳答案

不要将文件直接传输到您的程序正在监视的目录中;相反,将它们转移到同一驱动器上的不同目录中,然后在转移完成后,将它们移动到监视目录中。这样,完整的文件就会在单个原子操作中出现在监视目录中。

或者,您可以在监视目录中使用命名约定 — 将“.partial”等后缀附加到正在传输的文件,然后重命名文件以在传输完成后删除后缀。让您的程序忽略名称以 后缀结尾的文件。

关于C++ ifstream 尝试在写入时打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com