我创建一个应用程序,当我在Windows系统上工作时,它将C驱动器Windows系统上的目录副本复制到另一个文件夹,我使用这种方式here为应用程序管理员提供管理权限。
我使用此代码复制文件夹及其所有内容。
此功能。
void MainWindow::copyPath(QString src, QString dst)
{
QDir dir(src);
if (! dir.exists())
return;
foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
QString dst_path = dst + QDir::separator() + d;
dir.mkpath(dst_path);
copyPath(src+ QDir::separator() + d, dst_path);
}
foreach (QString f, dir.entryList(QDir::Files)) {
QFile::copy(src + QDir::separator() + f, dst + QDir::separator() + f);
}
}
并在按钮
中copyPath("C:/Windows/System32/spp/store", "D:/copyfolder");
当我在D驱动器上的另一个文件夹上进行测试时,它可以正常工作,因此我可以做些什么,以便让我的qt应用程序从C驱动器复制该文件夹。
当我给它这个路径C:/Windows/System32/spp/
时,它仅复制一个C:/Windows/System32/spp/tokens
文件夹,而其他文件夹未复制,当我给它路径C:/Windows/System32/spp/store
时,它不能对这种情况进行路径< / p>
QDir dir(src);
if (! dir.exists())
return;
它无法识别目录。因此,例如,如果我可以使用C#或其他任何方式执行此操作,请没问题,请提供任何信息,因为我尝试使用C#时,它也无法正常工作。
答案 0 :(得分:0)
好吧,@ markus发现了这只兔子,所以让我们来解决它。
64位Windows有一个称为File System Redirector的东西,它使32位应用程序以为他们正在看C:\WINDOWS\SYSTEM32
而实际上却不是,他们愚弄了他们。该链接后面的详细信息。
但是,您可以将其关闭。就原始Win32调用而言,您可以执行以下操作:
VOID *oldValue;
BOOL ok = Wow64DisableWow64FsRedirection (&oldValue);
// ...
ok = Wow64RevertWow64FsRedirection (oldValue);
很难想象为什么这些调用会失败。
还有:
BOOLEAN Wow64EnableWow64FsRedirection (BOOLEAN Wow64FsEnableRedirection);
,您可以无条件打开(仅用于受虐狂)或关闭它。
似乎没有电话来查找当前是否启用了重定向。我猜您可以做的是假设它在程序启动时将启用(它将被启用),然后跟踪您自己进行的任何更改。