Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Общие вопросы по программированию, компьютерным наукам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 07.08.2018, 08:25   #1
Kuzma's_Mother
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 11
Репутация: 10
Вопрос Почему так происходит? Какая-то мистика

Всем доброго времени суток.

У меня написана программа, что-то типа безопасного удалителя файлов.
Это происходит за 2 шага: перезапись содержимого файла случайной гаммой, а затем удаление. Алгоритм реализован на c#.

Проблема в том, что когда программа выполняется по шагам в режиме отладки - все корректно работает: файл перезаписывается гаммой, а затем удаляется, при восстановлении удаленного файла например программой Recuva, восстановленный файл будет набит этой случайной гаммой, что есть гуд.
А точнее - если после перезаписи гаммой сделать точку остановки в отладке, и затем выполнить команду удаления - то так же все будет хорошо.
НО. Как только программа отработала самостоятельно, вне отладки, то при восстановлении удаленного файла - случайной гаммы в нем НЕТ, он заполнен исходными данными.

Объясните пожалуйста, в чем проблема и почему так происходит
Kuzma's_Mother вне форума   Ответить с цитированием
Старый 07.08.2018, 08:45   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,758
Репутация: 2126
По умолчанию

Код надо смотреть. Дебаг и релиз версии различаются.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 07.08.2018, 09:59   #3
Kuzma's_Mother
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код надо смотреть. Дебаг и релиз версии различаются.
Я компилирую дебаг версию, ее и запускаю. Релиз не трогаю.
Kuzma's_Mother вне форума   Ответить с цитированием
Старый 07.08.2018, 10:05   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,758
Репутация: 2126
По умолчанию

Ну значит гадаем дальше на кофейной гуще - права на файл. Например, студия от админа запущена. Или вы используете какую либо функцию, которая требует повышения прав.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 07.08.2018, 11:15   #5
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,129
Репутация: 840
По умолчанию

Вы закрываете файл после записи?
Black Fregat вне форума   Ответить с цитированием
Старый 08.08.2018, 08:49   #6
Kuzma's_Mother
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Вы закрываете файл после записи?
Да, конечно. (еслиб не закрывал, то и при отладке файл бы не перезаписывался)

Выяснились ОЧЕНЬ интересные подробности: если поставить программу на паузу перед удалением (System.Threading.Thread.Sleep(5000 ), то все работает отлично. Видимо и при отладке все хорошо, потому что программа тоже ставится на паузу как бы.

Сам код:
Код:

            int bytesread;
            byte[] buf = new byte[BUF_SIZE];
            var rng = new RNGCryptoServiceProvider();

//собственно перезапись
            for (int i = 0; i < Patterns.Length; ++i)
            {
                s.Position = 0;
                switch (Patterns[i])
                {
                    case 0x00:
                        byte[] temp = new byte[BUF_SIZE];
                        for (int j = 0; j < BUF_SIZE; ++j)
                        { temp[j] = 0x00; }
                        for (; ; )
                        {
                            bytesread = s.Read(buf, 0, BUF_SIZE);
                            if (bytesread == 0) break;
                            buf = temp;
                            s.Position -= bytesread;
                            s.Write(buf, 0, bytesread);
                            
                        }
                        break;
                    case 0x01:
                        temp = new byte[BUF_SIZE];
                        for (int j = 0; j < BUF_SIZE; ++j)
                        { temp[j] = 0xFF; }

                        for (; ; )
                        {
                            bytesread = s.Read(buf, 0, BUF_SIZE);
                            if (bytesread == 0) break;
                            buf = temp;
                            s.Position -= bytesread;
                            s.Write(buf, 0, bytesread);
                        }
                        break;
                    case 0x02:
                        for (; ; )
                        {
                            bytesread = s.Read(buf, 0, BUF_SIZE);
                            if (bytesread == 0) break;
                            //  rng.GetBytes(buf, 0, bytesread);
                            rng.GetBytes(buf);
                            s.Position -= bytesread;
                            s.Write(buf, 0, bytesread);
                        }
                        break;
                }
            }
        
            s.Close();

//блок переименования файла
            string newfilename;
            Random rnd = new Random(); Random rndc = new Random();
            int rand= rnd.Next(100000000, 999999999); int randc = rndc.Next(0x0041, 0x005A);
            newfilename = Path.Combine(MyFileInfo.DirectoryName, String.Concat("~",(char) randc, rand.ToString(),".tmp"));
            File.Move(MyFileInfo.FullName, newfilename);

//удаление файла 
           // System.Threading.Thread.Sleep(5000); - пауза, когда не закоментирована все работает
            File.Delete(newfilename);


Последний раз редактировалось Kuzma's_Mother; 08.08.2018 в 08:52.
Kuzma's_Mother вне форума   Ответить с цитированием
Старый 08.08.2018, 08:53   #7
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,078
Репутация: 6385
По умолчанию

Надо полагать в буфере обновилось, файл удалился, а буфер не успевает записать. По идее так не должно быть
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 08.08.2018, 08:58   #8
Kuzma's_Mother
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Надо полагать в буфере обновилось, файл удалился, а буфер не успевает записать. По идее так не должно быть
Есть мысли как исправить? Ставить на паузу на 5 секунд - это как то не очень эффективно)
Kuzma's_Mother вне форума   Ответить с цитированием
Старый 08.08.2018, 09:06   #9
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,078
Репутация: 6385
По умолчанию

FlushFileBuffers ?
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 08.08.2018, 10:26   #10
Kuzma's_Mother
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
FlushFileBuffers ?
Добавление
Код:

s.Flush();

перед закрытием потока
Код:

s.Close();

результата не дало
Kuzma's_Mother вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто разъяснит почему так происходит с функцией JS DimaDR JavaScript, Ajax 4 15.11.2017 19:17
Мистика какая то, срочно прошу помощи знающих websaco Visual C++ 0 28.04.2014 16:44
Цикл Cardinal - почему так происходит? Nester Общие вопросы Delphi 2 28.07.2010 15:04
Form Region-почему так происходит Nester Общие вопросы Delphi 3 14.09.2009 21:16
Почему так происходит? Zeraim Общие вопросы Delphi 1 05.05.2008 14:10


08:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru