QFile::copy 说“无法打开源文件进行输入”?

Posted

技术标签:

【中文标题】QFile::copy 说“无法打开源文件进行输入”?【英文标题】:QFile::copy says "can't open source file for input"? 【发布时间】:2013-07-17 18:24:34 【问题描述】:

我将使用 QFile::copy 函数复制一个文件,但该函数总是返回 false 并且 errorString 说:

"Cannot open D:/tmp/buf34.txt for input" 

我尝试以管理员权限运行此程序,但没有任何改变。我的代码很简单:

  QString source = url.toLocalFile();
  QString destination = _dir.absolutePath()
            + QString("/%1").arg(QFileInfo(source).fileName());
  qDebug()<<"Cp from :" << source << " to : "<< destination;
  QFile file(source);
  qDebug()<<file.copy(destination);
  qDebug()<<file.errorString();

编辑: 我有一个QFileSystemModel 占用了 QListView。我尝试将一个文件从这个 ListView 拖到 QLabel。对于 QLabel,设置了目标路径。在放置事件中,我尝试复制文件。

【问题讨论】:

qDebug() &lt;&lt; "source exists: " &lt;&lt; QFileInfo(source).exists();看看源文件是否存在如何? 不,我确定目标中不存在源文件。错误提示无法打开源文件。 源文件是如何到达那里的?它是由其他仍然可以打开文件的程序编写的吗? 我设置了一个 QFileSystemModel 模型,其中包含一个 listView 的路径。然后我将一个文件从这个 listView 拖到一个标签(为这个标签设置了目的地)。在 drop 结束时,我尝试将从 listView 中选择的文件复制到标签的目录! @saeed 我猜这个文件是被另一个QFile::open打开的,如果不是:"source" 存在吗?您不能复制一个不存在的文件。如果有,您是否正在尝试在具有权限的目录中录制(Windows Vista、Windows 7 等)? 【参考方案1】:

QFile::copy 使用 QFile::open 但会覆盖错误消息 open 将由你得到的无用的 "Cannot open %1 for input" 给出。

因此,您应该尝试自己打开文件以获取原始错误消息:

qDebug()<<file.open(QFile::ReadOnly);
qDebug()<<file.errorString();

【讨论】:

哦,谢谢!现在错误是:文件名、目录名或卷标语法不正确。QUrl::toLocalFile 在字符串末尾添加“\r\n”。所以 source 是 fileAddress + "\r\n" ! 我刚刚从末尾删除了“\r\n”,现在文件已成功复制!但是你知道为什么会这样吗? @saeed 我在QUrl::toLocalFile 的源代码中看不到任何可以在文件名中添加“\r\n”的内容。它可能已添加到其他地方。

以上是关于QFile::copy 说“无法打开源文件进行输入”?的主要内容,如果未能解决你的问题,请参考以下文章

QFile::copy create 会创建文件的副本还是将内容从一个文件移动到另一个文件?

Qt 实现文件夹拷贝功能

Qt 实现文件夹拷贝功能

Qt 实现文件夹拷贝功能

使用 sudo 权限的 Qt 复制文件

如何设置应用路径?