gpt4 book ai didi

c++ - 如何防止打开文件两次?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:15 25 4
gpt4 key购买 nike

我有一个 Mdi 应用程序
此应用程序允许在 subWindow 中打开文本文件。
问题是您可以多次打开同一个文件。

我使用了以下不完整的代码:

QList<QMdiSubWindow*> subWindows = ui->mdiArea->subWindowList()

但是我怎么知道文件是否存在。

如何防止这种行为?


修改

我已经执行了以下代码,并且工作正常:(请查看代码)

QList <QMdiSubWindow*> subWindows = ui -> mdiArea -> subWindowList();
if (subWindows.count() > 0) {
for (int i = 0; i < subWindows.count(); i++) {
if (subWindows.at(i) -> property("filePath").toString() == fileDlg) {
return;
}
}
}

完整代码:

QString fileDlg = QFileDialog::getOpenFileName(this, "Open File", "F://", "Text Files(*.txt)");
if (fileDlg != "") {

// Start the important code
QList < QMdiSubWindow * > subWindows = ui -> mdiArea -> subWindowList();
if (subWindows.count() > 0) {
for (int i = 0; i < subWindows.count(); i++) {
if (subWindows.at(i) -> property("filePath").toString() == fileDlg) {
return;
}
}
}
// End the important code

QString cache;
QFile file(fileDlg);
if (file.open(QFile::ReadOnly)) {
QTextStream in ( & file);
while (!file.atEnd()) {
cache = in .readAll();
}
}
file.close();


QFileInfo finfo(file);
QWidget * widget = new QWidget(this);
QTextEdit * TextEdit = new QTextEdit(widget);
TextEdit -> setObjectName("myTextEdit");
QMdiSubWindow * mdiWindows = ui -> mdiArea - > addSubWindow(widget);
mdiWindows -> setProperty("filePath", fileDlg);
mdiWindows -> setGeometry(5, 5, 300, 250);
mdiWindows -> setWindowTitle(finfo.baseName());
mdiWindows -> layout() -> addWidget(TextEdit);
mdiWindows -> setWindowState(Qt::WindowMaximized);
mdiWindows -> layout() -> setSpacing(0);
TextEdit -> setText(cache);
mdiWindows -> show();
}

最佳答案

根据操作系统的不同,同一个文件可以有多个不同的名称。即使是同一个名字也可以用不同的方式引用(想想遍历目录结构!)。任何纯粹基于名称的方案都注定会失败。

这样做通常非常有用,我经常打开同一个文件多次,在编辑另一个地方的同时查看一个地方。让用户决定。

关于c++ - 如何防止打开文件两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347229/

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