гарантированного универсального способа не существует, во-первых, потому что мы не знаем подробностей о том, как устроено хранение файлов в конкретной системе (ФС, вид памяти и носителя под ней и т. д.), во-вторых, ОС далеко не всегда предоставляет нам какие-то интерфейсы для того, чтобы этими деталями манипулировать
так что самое лучшее, что можно сделать средствами самого языка - это записать рандом поверх содержимого файла несколько раз (вряд ли сработает на чем-то, кроме ЖД) и потом удалить как обычно (см. std::filesystem)
C/C++
Как удалить с помощью C++ безвозвратно файл? То есть без способа его восстановления
Женя Трищенков
То есть удалить файл и после этого в части памяти где он был удалён заполнить его чем-то?
В современном мире уничтожение информации гарантирует только физическое уничтожение носителя. Но спрятать файл от чайников, действительно, можно вышеописанным способом - записать в него ерунду и удалить. Восстановить-то его можно будет, конечно, но внутри будет ерунда. Ну а товарищ майор... Нет, товарищ майор, наверное, не справится. А вот агент Малдер - тот выпаяет микросхемы из твоего накопителя, прочитает их на низком уровне, загонит все в суперкомпьютер и при помощи мудрых алгоритмов найдет все уцелевшие куски твоего файла, поскольку мудрый же контроллер накопителя при перезаписи переназначает физические ячейки и информация, с некоторой вероятностью, может сохраниться. Ну а в случае с ЖД он вынет диски и прочитает то, что на них было записано раньше, методом чтения между дорожками на специальном устройстве... В общем, только сжечь и переплавить.
Анатолий ***
физически уничтожить, как терминатор себя погрузил в лаву. Но вариант с оптимизацией не рассматривался - как раньше серые квадратики показывали упорядочение диска - там перезапись была файлов в прямом смысле. Так что вполне вероятно, что затрёт старую запись
#include< cstdio >
using namespace std;
int main(){
remove("path");
}
Возможно будут проблемы, если файл может трогать только суперюзер, в этом случае программу следует запускать от имени администратора или если ты на линухе, то писать sudo ./program, а потом вводить пароль
using namespace std;
int main(){
remove("path");
}
Возможно будут проблемы, если файл может трогать только суперюзер, в этом случае программу следует запускать от имени администратора или если ты на линухе, то писать sudo ./program, а потом вводить пароль
это очень просто, открой фаил на запись и запиши в него столько нулей сколько по размеру сам фаил, потом просто удали через filesystem. NTFS и ext4 гарантируют статичность адресов блоков файлов если не происходит запись с расширением или сохранение с усечением. это значит что все записанные данные будут примененны к тем-же блокам на которых находится старые.
И значит что все данные будут просто перезаписаны без возможности восстановления.
Наданный момент почти для всех популярных файловых систем, данный трюк успешно работает.
Псевдо пример:
void SecureDeleteFile(const String& filePath)
{
File f(filePath, WRITE | BINARY);
long long fileSize = f.size();
for (long long i = 0; i < fileSize; i++)
f.writeByte(0);
f.close();
File::deleteFile(f);
}
И значит что все данные будут просто перезаписаны без возможности восстановления.
Наданный момент почти для всех популярных файловых систем, данный трюк успешно работает.
Псевдо пример:
void SecureDeleteFile(const String& filePath)
{
File f(filePath, WRITE | BINARY);
long long fileSize = f.size();
for (long long i = 0; i < fileSize; i++)
f.writeByte(0);
f.close();
File::deleteFile(f);
}
Похожие вопросы
- Массив C++ из файла
- Написать программу на C++ (Тема файлы)
- Модули. Коммуникация между двумя .c файлами.(Си)
- C++ библиотека fstream. при использовании Кириллицы изменяется кодировка в создаваемом файле..
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Помогите с файлами C++
- C++ Работа с файлами.
- Как в C++ продолжить классы разные сгруппировано в файлах .h и .cpp, при этом не переопределяя классы эти?
- Нужна помощь с выполнением заданий в C++
- Помогите решить задачку по теме работа с файлами C++