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() << "source exists: " << 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 说“无法打开源文件进行输入”?的主要内容,如果未能解决你的问题,请参考以下文章