gpt4 book ai didi

c++ - Qdir 的函数 exists() 总是返回 true,即使目录不存在

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

我正在尝试对项目的第一部分进行防错,其中在指定的基本目录中创建了一个文件夹。基本目录由用户在 QLineEdit 中手动选择,或者通过使用 QFileDialog 浏览计算机目录来选择。在使用以下命令在其中创建子文件夹之前,我尝试检查基本目录是否存在:

QString base_dir = ui->baseDir->text();
QString blank = "";
QString no_text1 = "Please enter a valid directory";
if( base_dir==no_text1 || base_dir==blank ) {
if( !QDir( base_dir ).exists() ) { //does base directory exist?
ui->baseDir->setText( no_text1 );
return;
}
}

问题是,无论我在行编辑中输入有效目录还是无效目录(即随机短语),第二个 if 语句总是返回 false,这意味着 exists() 总是返回 true。第一个 if 语句正常工作。我只是用错了 exists() 吗?

编辑:完整代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "functions.h"
#include <QtGui/QApplication>
#include <QFileDialog>
#include <fstream>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}




// This is the function that handles the directory search when the 'browse' button is pressed
void MainWindow::on_findDir_clicked()
{
QString path; //declaring the path to the base directory

path = QFileDialog::getExistingDirectory( //gathering the directory from QFileDialog class
this, tr("Choose the project directory"),
"/home",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks );

ui->baseDir->setText( path ); //setting the retrieved path into the line edit box
}



// This function makes the project by creating a new directory with name 'project_name'
// in the base directory, and collects the OpenFOAM version number and simulation type
void MainWindow::on_create_clicked()
{

QString project_name, foam_version, full_dir, slash, base_dir;
base_dir = ui->baseDir->text();
project_name = ui->projectName->text(); //getting the text from the 'projectName' field
foam_version = ui->version->currentText(); //getting the selection from the 'version' drop-down box

//first checking if the fields have input in them:
QString blank = "";
QString no_text0 = "Please enter project name";
if( project_name==no_text0 || (project_name==blank) ) {
ui->projectName->setText( no_text0 );
return;
}


QString no_text1 = "Please enter a valid directory";
if( base_dir==no_text1 || base_dir==blank ) {
if( !QDir( base_dir ).exists() ) { //does base directory exist?
ui->baseDir->setText( no_text1 );
return;
}
}


slash = "/"; // needed to separate folders in the directory (can't use a literal)
full_dir = base_dir.append(slash.append(project_name));

if( !QDir(full_dir).exists() ) //check if directory already exists
QDir().mkdir(full_dir); //creating directory

QString blockmesh_filename, suffix;
suffix = "_blockmesh";
slash = "/"; //must re-define
blockmesh_filename = full_dir.append( slash.append( project_name.append(suffix) ) );
std::ofstream create_file( blockmesh_filename.toStdString().c_str() ); //creating empty blockmesh file

}

最佳答案

如果您在文本字段中输入任何内容,您的第二个 if 语句将不会执行。第一个 if 中的逻辑表明,如果输入为空或预定义字符串,则测试目录是否存在。这意味着您始终使用空字符串或固定消息进行测试。

正确的逻辑应该是:

if( base_dir!=no_text1 && base_dir!=blank ) {
....

关于c++ - Qdir 的函数 exists() 总是返回 true,即使目录不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296757/

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