在再次打开文件之前知道文件当前是否打开的方法?

时间:2017-04-21 13:27:28

标签: c++ qt qt5

我有一个程序可以多次打开同一个文件 如果此文件当前是打开的,我想在打开任何文件之前检查,因为我不想多次打开同一个文件。

enter image description here

是否有内置函数可以检查文件当前是否打开或其他任何方式都可以执行此操作?

守则:

QString openFilePath = QFileDialog::getOpenFileName(this->mainWindow, "Open File");
if(openFilePath == ""){
    return;
}
QFile openFile(openFilePath);
if(!openFile.open(QFile::ReadWrite)){
    QMessageBox::critical(this->mainWindow, "Can't Open file", "Can't access to the file.");
}
QTextStream fileContent(&openFile);
QFileInfo fileInfo(openFile);
this->createEmptyFile(fileInfo.fileName());
this->txtEditor->setText(fileContent.readAll());

4 个答案:

答案 0 :(得分:6)

在我看来,你的问题实际上与编程意义上的文件打开无关,而是与你的应用程序逻辑完全相关。您需要在内部保留所有当前打开的文件的列表(在您的GUI显示此类文件的意义上),并检查用户是否打开新文件。

答案 1 :(得分:0)

常规文件打开,比如说追加,取决于函数,如果文件已经打开,通常会返回NULL或引发异常。有无状态文件系统,这种方法可能无法正常工作。

std::fstream fs;
try {
    fs.open("lk.txt", std::fstream::in | std::fstream::out | std::fstream::app);
    fs << "We're way beyond the boundaries of the Pride Lands.";
} catch (const std::ios_base::failure &ex) {
    // Something happened
    std::cerr << ex.what() << std::endl;
}
fs.close();

在某些文件系统中,还有共享打开模式,它们将明确允许您同时重新打开文件并执行您想要的操作而不会产生错误。

答案 2 :(得分:0)

existing question

你也可以尝试黑客攻击)我不知道它是否有效,但是:在

void QFile::setFileName(const QString &name)

功能概述QFile您可以看到

  

如果文件已经打开,请不要调用此函数。

嗯)如果尝试在try catch中重命名以避免崩溃,如果重命名,再次重命名并打开,该怎么办?所以你可以试试。

答案 3 :(得分:-1)

这是您问题的解决方案: -

<强> IS_OPEN()

范围: 的std :: ofstream的:: IS_OPEN

1.it检查文件是否打开?

2.it返回流当前是否与文件关联

3.it是 fstream 的公共成员函数。

4. 参数 -none

示例代码:

var arr = ['a','b','c','d','a','b','c','d'];
var newA = [];
for(var i = 0; i < arr.length; i++){
    if(newA.indexOf(arr[i]) === -1){
        newA.push(arr[i]);
    }
 }

<强>输出:

成功写入文件