Dauerhaft löschen Sie die Datei in Qt
Musste ich ändern, das Programm auf Qt, die ich nicht schreiben. Ich befindet sich die Stelle im code und weiß, was ich will, aber ich weiß nicht, was zu ändern, so suchen Sie Hilfe.
Code ist wie folgt:
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();
}
Sind hier ersetzt durch den Inhalt der Datei mit Nullen für die Unfähigkeit, sich zu erholen nach Ihrer Löschung. Googeln kam ich zu zwei Schlussfolgerungen, entweder es gibt keine wirkliche schreiben in die Datei, oder Sie schreibt neue Daten in andere Datenträger-Sektoren, und die alten bleiben in Kraft. Wie zu machen, so dass der Inhalt der Datei ersetzt, die mit Nullen für die Unfähigkeit, sich zu erholen es?
Jede Hilfe wird wirklich geschätzt!
- es gibt absolut keine Garantie, dass der alte block ist nicht immer noch da auf der Festplatte/in einigen backup.
- Dies ist eine Häufig gestellte Frage - Suche für das sichere löschen von Dateien. Beispiel 1 Beispiel 2 Es ist ein schwieriges problem und besser Links bis zu einem tool, das bereits tut es, anstatt zu versuchen, die Entwicklung Ihrer eigenen (Qt bietet keine Funktionalität, um dies zu tun, wird es sehr OS-abhängig).
- wenn Sie nicht möchten, dass jemand zu Lesen der Inhalte der Datei, wenn Sie brauchen nicht die Datei, dann, wahrscheinlich wollen Sie das gleiche, wenn Sie müssen noch die Datei. So ist der einfachste Weg, um zu verhindern, dass jemand aus der Lektüre eines vorhandenen und gelöschten Datei zu verschlüsseln. Ich verstehe, dass dies ist nicht, was Sie Fragen, und es ist schwer zu verschlüsseln, Datei sicher, aber das kann helfen. In der Regel kann man einfach nicht sicher sein, dass die Datei nicht wiederhergestellt werden kann, bis Sie körperlich Schmelzen Sie die Festplatte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würde ich persönlich nur verwenden
shred
oder ein ähnliches tool überQProcess
. Das ist wahrscheinlich die beste Wirkung /Aufwand-Verhältnis in diesem Fall.Ich glaube nicht, sollten Sie erfinden diese selbst, wie das ist nicht eine Qt-spezifische Sache, noch ist es etwas gemeinsames.
shred
tut ziemlich viel, was der code oben bedeutet, das zu tun... unter Windows ein port vonshred
ist unzureichend.SDelete
ist die einzige vernünftige Lösung (oder eine genaue reimplementation).Der code ist ziemlich verschachtelt ist. Es lohnt sich nicht "fixieren".
Unten ist eine halbwegs vernünftige Umsetzung, dass sollte funktionieren, solange ein solcher Ansatz kann alle auf Ihrem system. Wenn Sie sagen, dass es "nicht funktioniert" - wie wollen Sie das überprüfen? Auf welche Plattform? Welche Qt-version?
Beachten Sie, dass unter Windows, das tool ist nutzlos mit komprimierten, verschlüsselten und sparse-Dateien. Intern, das schreiben in diese Dateien kopiert zuerst die Cluster und dann hat änderungen in der kopierten Cluster, verlassen der ursprünglichen Daten hinter sich. Die SDelete tool meistert diese entsprechend.
WriteOnly
öffnen konnte conceiveably kürzen Sie die Datei, und das wollen wir nicht. DieReadWrite
öffnen sollte nicht Schaden, denke ich. Dieclose()
erfolgt automatisch durchremove()
, es ist ein VerhaltenQFile
und nicht Plattform-abhängig.