Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,542
1

У меня одного без труда удаляются открытые файлы?

25.11.2012, 20:34. Просмотров 721. Ответов 16
Метки нет (Все метки)

Иной хакер ради изучения много бы дал за такое поведение своей системы. Ну то есть открываешь файл в текстовом редакторе и тут же без проблем его вручную удаляешь, и никакого предупреждения, только подтверждение для удаления и всё.
И вот для чистоты эксперимента создаю файл, не закрываю его и он тоже удаляется...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <windows.h>
#include <stdio.h>
 
int main ( ) { 
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 char falis_name []= "main.txt";
 
 
 
 HANDLE hFile = CreateFile(falis_name,
                       0,
                     FILE_SHARE_READ, 
                     NULL,
                     CREATE_NEW, 
                     FILE_ATTRIBUTE_NORMAL, 
                     NULL);
 
 
 
 if (hFile!=INVALID_HANDLE_VALUE)
  printf ("А щас вручную удаляй файл main.txt!\n");
 getchar ();
 return 0;
}
Чё у меня случилось, знает кто-нибудь? Или у всех такое поведение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 20:34
Ответы с готовыми решениями:

[C++] Решите за меня задачи на файлы
1) Дан файл f, компоненты которого являются действительными... найти сумму...

пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить
по заданному списку фамилий напечатать каждому упомянутому в списке...

Класс без имени: почему у меня скомпилировалась такая конструкция?
Приветствую! Почему у меня скомпилировалась такая конструкция? class { ...

Удаляются файлы без занесения в корзину
В Finder файлы удаляются без занесения в корзину, с внешних устройств все...

Последние открытые файлы
Добрый день. Пишу редактор, при нажатии на кнопку &quot;Последние файлы&quot; появляется...

16
Kuzia domovenok
2395 / 2116 / 509
Регистрация: 25.03.2012
Сообщений: 7,616
Записей в блоге: 1
25.11.2012, 20:54 2
Цитата Сообщение от kravam Посмотреть сообщение
CREATE_NEW,
вот что случилось
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2012, 20:59 3
Цитата Сообщение от kravam Посмотреть сообщение
Или у всех такое поведение?
У меня такое.
1
Kuzia domovenok
2395 / 2116 / 509
Регистрация: 25.03.2012
Сообщений: 7,616
Записей в блоге: 1
25.11.2012, 21:07 4
тема закрыта, вопрос решён?
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,542
25.11.2012, 21:11  [ТС] 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
вот что случилось
это ни при чём, просто создал новый файл и на момент удаления вручную этот файл ОТКРЫТ (задействован, занят, не знаю как ещё сказать). Откройте существующий файл с флагом OPEN_EXISTING- эффект тот же самый. Я потому так не сделал, что движений больше: это надо было бы заранее создать файл-мишень и исходник, всё это в папку упаковать, папку сархивировать и отправить на форум.
Мы уж лучше так.

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
тема закрыта, вопрос решён?
а чё решён-то один alsav22, отписался, это ещё не решён.
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.11.2012, 21:13 6
У меня тож, даже разрешения на удаление не спрашивает) OC win8.
1
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,542
25.11.2012, 23:01  [ТС] 7
NTFiles.exe даёт Delete Acces NOT allowed. если вы про это. Тем не менее файл благополучно удаляется, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <windows.h>
#include <stdio.h>
 
int main ( ) { 
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 char falis_name []= "main.txt";
 
 
 
 HANDLE hFile = CreateFile(falis_name,
                       0,
                     0, 
                     NULL,
                     CREATE_NEW, 
                     FILE_ATTRIBUTE_READONLY, 
                     NULL);
 
 
 
 if (hFile!=INVALID_HANDLE_VALUE)
  printf ("А щас вручную удаляй файл main.txt!\n");
 getchar ();
 return 0;
}
Я добавил FILE_ATTRIBUTE_READONLY, как видите
0
grizlik78
Эксперт С++
2005 / 1489 / 203
Регистрация: 29.05.2011
Сообщений: 3,086
25.11.2012, 23:56 8
Цитата Сообщение от kravam Посмотреть сообщение
Иной хакер ради изучения много бы дал за такое поведение своей системы.
Что полезного в этом для хакера?

Цитата Сообщение от kravam Посмотреть сообщение
Тем не менее файл благополучно удаляется
Это вряд ли. Файл может быть либо перемещён в корзину, либо поставлен в очередь для удаления, но при этом реальное удаление будет произведено только после закрытия файла. Правда проводник при удалении с помощью Shift+Del (т. е. не в корзину) файл из списка убирает. Но стоит нажать F5 для обновления, как файл появляется снова. Это в XP. После закрытия файл удалится.
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,542
26.11.2012, 00:15  [ТС] 9
Смотрите, я жму я запускаю main.exe, потом мышкой удаляю файл, ну как мышкой- курсор на файл, правая кнопка, удалить, "ДА". Всё, файла нет. И F5 не помогает. Ладно он в корзине, а если я выставлю галку чтобы мимо корзины удалялся? Всё, я без файла. Я знаю, можно сказать чтобы я такую галку не ставил, но не об этом же речь.

Речь о том, что он не должен удаляться ни в корзину никуда, иначе грош цена всем этим флагам FILE_ATTRIBUTE_READONLY; написано же- только для чтения!

Да и после закрытия он не должен удаляться. Только для чтения значит только для чтения. Но похоже всем всем равно.
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
26.11.2012, 00:24 10
Добавьте после CreateFile
C++
1
2
 OFSTRUCT fs;
 HFILE hF = OpenFile(falis_name,&fs,0);
0
grizlik78
Эксперт С++
2005 / 1489 / 203
Регистрация: 29.05.2011
Сообщений: 3,086
26.11.2012, 00:31 11
OpenFile можно не добавлять. Достаточно в CreateFile вторым параметром указать либо GENRIC_READ, либо GENERIC_WRITE. Ну, или оба сразу.
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
26.11.2012, 00:41 12
kravam, у меня на Win7 точно такое же поведение, как у grizlik78. У меня по умолчанию файлы удаляются, не перемещаясь в корзину. И точно так же, после обновления каталога, файл появляется снова. В смысле файл удаляется из списка, но после обновления, он появляется снова.
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
26.11.2012, 00:59 13
Да нормальное это поведение.
Может это поможет, хотя не знаю, описано там это или нет:
CreateFile
0
activnaya
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 01:01 14
kravam, а почему он НЕ должен удаляться с твердого накопителя, когда он загружен в оперативную память?
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,542
26.11.2012, 01:27  [ТС] 15
Если третий параметр 0, удаляться не должен. Всё! Читаем здесь (MSDN):

0 Prevents other processes from opening a file or device if they request delete, read, or write access.

В посту N 7 как раз я установил третий параметр в 0. Но он всё равно удаляется, (в корзину или мимо корзины, это неважно щас, галку соответствующую каждый может поставит как захочет) и это вводит в уныние, раз уж MSDN врёт, тогда я не знаю, что и делать.
0
grizlik78
Эксперт С++
2005 / 1489 / 203
Регистрация: 29.05.2011
Сообщений: 3,086
26.11.2012, 02:02 16
Все врут. Укажи вторым параметром GENRIC_READ хотя бы.
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
26.11.2012, 02:14 17
C++
1
2
3
4
5
6
7
 HANDLE hFile = CreateFile(falis_name,
                       GENERIC_WRITE,
                     0,
                     NULL,
                     CREATE_NEW, 
                     FILE_ATTRIBUTE_NORMAL, 
                     NULL);
C++
1
2
3
4
5
6
7
 HANDLE hFile = CreateFile(falis_name,
                       GENERIC_WRITE,
                     FILE_SHARE_DELETE,
                     NULL,
                     CREATE_NEW, 
                     FILE_ATTRIBUTE_NORMAL, 
                     NULL);
Первый случай - нельзя удалить, второй - удаляйте сколько влезет.
0
26.11.2012, 02:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 02:14

файлы открытые пользователем
Как проследить какие файлы открывает пользователь (музыка, фильмы, exe) ? И...

Winamp не запоминает все открытые файлы
Winamp не хочет запоминать все файлы из открытой папки, приведу пример: У...

Винда скрывает все открытые окна при перетаскивании одного
привет открыто окон 20 различных программ беру одно и начинаю перетаскивать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru