我有一个非常基本的怀疑.通常,我必须编写使用缓冲文件I/O的应用程序,每次我遇到选择缓冲区大小的困境时,我最终会通过非常讨厌的结果进行反复试验.我想知道是否有任何方法或算法可以根据Teracopy在Windows中处理文件时所基于的底层平台自动确定作业的最佳缓冲区大小.我主要使用Qt作为GUI.
如果可能的话,非常感谢C/C++/C#/ Java中的一个小例子!
谢谢!
我已经开发了自己的混合流密码,对于GUI,我使用的是Qt.最初我是在单个线程上编写的,但它是一个流密码,当在大文件上运行时,GUI功能失调.所以我将加密/解密转移到单独的Qthread.为了显示进度,我在GUI上包含了一个标准的QProgressbar.但是当我运行文件I/O时,加密/解密工作完美但进度条没有正确更新.整个操作完成后,进度条突然从0%变为100%,表明在操作过程中没有机会更新.对于代码,我将完成的百分比从FileCrypto发送到主GUI线程到QProgressbar的setValue(int)插槽.由于它不起作用,我还尝试将一个int poitner发送到FileCrypto线程,同时用百分比更新指针并在GUI线程上使用QTimer在本地检查int值的值并更新进度条但仍然我得到了完全相同的结果.
这是我的代码:
FileCrypto类:
#include <QThread>
#include <QFile>
#include <PolyVernam.h> //my algo header
class FileCrypto : public QThread
{
Q_OBJECT
public:
FileCrypto(QString, QString, int);
bool stopIt;
protected:
void run();
signals:
void completed(int);
void msg(QString);
void pathMsg1(QString);
void pathMsg2(QString);
void keyMsg(QString);
private:
QFile src, dest;
QString tag;
int mode;
qint64 length;
PolyVernam pv;
};
Run Code Online (Sandbox Code Playgroud)
代码:
#include <FileCrypto.h>
FileCrypto::FileCrypto(QString input, QString keyFile, int mode)
{
stopIt = false;
this->mode = mode;
src.setFileName(input);
if(mode == 1)
{
emit msg("Current Encryption/Decryption status: Encrypting file... …
Run Code Online (Sandbox Code Playgroud) buffer ×1
c ×1
c++ ×1
cryptography ×1
file ×1
file-io ×1
java ×1
qprogressbar ×1
qt ×1
qthread ×1