相关疑难解决方法(0)

QT复制到QTemporaryFile

我想制作一份some/path/myfilein 的副本$TMPDIR/myprog-<random-string>.ext,这样我就可以将它传递给第三方程序,该程序会阻塞无扩展文件.

这是我想要的工作:

QString originalPath = "some/path/myfile";

QTemporaryFile f(
    QDir::temp().absoluteFilePath("mprog-XXXXXX.ext")
);

// f.open(); ?

QFile(originalPath).copy(f.fileName());
Run Code Online (Sandbox Code Playgroud)

但是,我现在有一个问题 - 文件尚未存在,因此尚未分配临时fileName()文件,或文件名已分配,但文件本身已存在,阻止新文件被复制到顶部.

如何在QT中将文件复制到临时位置,并在调用QTemporaryFile的析构函数时删除临时副本?

c++ qt temporary-files

6
推荐指数
1
解决办法
3455
查看次数

非阻塞工作者 - 中断文件复制

我正在处理非常大的文件,大小超过数百GB.用户需要能够在磁盘之间移动这些文件,并且是在没有默认文件管理器的受限系统上.用户可能会意识到他们犯了错误并取消了操作,据我所知,用户必须等待当前的复制或重命名操作才能完成.这可能让他们感到沮丧,因为他们等待了几分钟,只是看到他们的许多GB文件仍然被复制.在复制的情况下,我可以删除第二个文件,但在重命名的情况下,我用来移动文件,我必须反向重复操作以撤消它,这是不可接受的.

有没有办法中断我在QFile文档中没有看到的copy()和rename(),或者我需要将自己的类放在一起来处理复制和重命名?

c++ qt qfile qt4.8

4
推荐指数
1
解决办法
1569
查看次数

QT - QFile复制操作极其缓慢

我正在开发一个应用程序,需要使用QT(5.6.1)将大量文件从一个文件夹复制到另一个文件夹

为此,我一直在使用这种QFile::copy()方法.这样做很有效,除了一件事:它非常慢.使用Windows资源管理器执行相同的复制操作所需的时间超过两倍.

想知道为什么会这样,我挖了QT源代码,我发现了这个qfile.cpp,看起来很相关:

char block[4096];
qint64 totalRead = 0;
while(!atEnd()) {
    qint64 in = read(block, sizeof(block));
    if (in <= 0)
        break;
    totalRead += in;
    if(in != out.write(block, in)) {
        close();
        d->setError(QFile::CopyError, tr("Failure to write block"));
        error = true;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,据我所知,复制操作使用4096字节的缓冲区.这对于复制操作来说非常小,很可能是问题的原因.所以我做的是将缓冲区的大小更改为:

char block[4194304]; // 4MB buffer
Run Code Online (Sandbox Code Playgroud)

然后我重建了整个QT库以包含此更改.但是,所有的修改都完全打破了这个方法.现在,当我的应用程序尝试调用QFile :: Copy()时,操作立即中断(方法甚至没有开始运行,根据QtCreator的调试器在第一行之前停止).调试器告诉我:

The inferior stopped because it received a signal from the Operating System.

Signal name :
SIGSEGV
Signal meaning :
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

我的c …

c++ qt qfile

2
推荐指数
1
解决办法
712
查看次数

标签 统计

c++ ×3

qt ×3

qfile ×2

qt4.8 ×1

temporary-files ×1