繁体   English   中英

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

[英]C++ ifstream tries to open file while being written

我不断地为一个目录轮询文件,每当我看到一个符合某些阅读标准的文件时,我打开文件并解析它。

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等到文件写完之后?

编辑:由于回复者似乎误解了我的问题,所以想在这里更好地说出这个问题。 我有2个目录

mydirectory/
mydirectoryParsed/

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

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

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

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

每次写入文件时都不应该打开文件。 打开一次!

一些伪代码将是:

 1- Open file 2- Get the data you want to write, treat that data 3- Call the write to file function 4- Loop until you have nothing left to write 5- Close de file 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM