我不得不在Qt上修改我没有写过的程序。我在代码中找到了位置,并知道我想要它是什么,但我不知道要更改什么,因此请寻求帮助。代码如下:
QFile file(path);
qint64 size = filesize(path);
qint64 blockSize = 10240;
bool ok = file.open(QIODevice::ReadWrite);
if (ok)
{
QTime t;
t.start();
file.seek(0);
for (int i = 0; i < ceil(double(size) / double(blockSize)); i++)
{
qint64 block = size - i * blockSize;
if (block > blockSize)
{
block = blockSize;
}
QByteArray data;
data.resize(block);
data.fill('0');
file.write(data, block);
}
file.close();
file.remove();
}此处替换为带有零的文件内容,以便在删除文件后无法恢复。谷歌我得出了两个结论,要么在文件中没有真正的写入,要么它将新数据写入其他磁盘扇区,而旧数据仍在原地。如何使文件的内容真正替换为零而无法恢复呢?任何帮助都将不胜感激!
发布于 2014-04-04 20:40:06
我个人只会通过QProcess使用shred或类似的工具。在这种情况下,这可能是最佳的效果/效果比。
我不认为你应该自己发明这个,因为这不是Qt特定的东西,也不是什么常见的东西。
发布于 2014-04-05 00:42:47
代码相当复杂。这不值得“修复”。
下面是一个合理的实现,应该可以工作,只要这样的方法可以在您的系统上工作。如果你说它“不起作用”--你怎么检查它?在什么平台上?什么Qt版本?
请注意,在Windows上,此工具对压缩、加密和稀疏文件无效。在内部,写入此类文件首先复制群集,然后在复制的群集中进行修改,从而将原始数据留在后面。SDelete工具可以适当地处理这些问题。
bool shred(const QString & fileName) {
QFile file(fileName);
QFileInfo fi(file);
qint64 fileSize = fi.size();
if (! file.open(QIODevice::ReadWrite | QIODevice::Unbuffered)) return false;
QByteArray block(65536, '\0');
while (fileSize > 0) {
if (fileSize < block.size()) block.truncate(fileSize);
qint64 written = file.write(block);
if (written != block.size()) return false;
fileSize -= written;
}
Q_ASSERT(fileSize == 0);
fsync(file.handle());
return file.remove();
}发布于 2015-06-26 04:38:27
QDir destination;
destination.remove("path to file");https://stackoverflow.com/questions/22861701
复制相似问题