【问题标题】:QFile::copy says "can't open source file for input"?QFile::copy 说“无法打开源文件进行输入”?
【发布时间】: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 等)?

标签: qt qfile


【解决方案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”的内容。它可能已添加到其他地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2011-03-29
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多