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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Заполнение массива от -5 до 5. http://www.cyberforum.ru/cpp-beginners/thread298867.html
Всем привет, народ помогите пожалуйста с задачей... Borland c 3.1 Заполнить массив из десяти элементов случайными числами в диапазоне от -5 до 5. Найти все элементы массива, которые равны единице и распечатать их номера. Заранее спасибо!
C++ Проверка буфера клавиатуры Здравствуйте! Я читаю с клавиатуры cin'ом. Как мне проверить, что в буфере еще есть данные? http://www.cyberforum.ru/cpp-beginners/thread298850.html
Массивы одномерны и двумерные C++
Доброе время суток помогите пожалуйста с решение задач, заранее спасибо. :) Пригодность детали оценивается по размеру В, который должен соответствовать интервалу A-b, А+b. Определить, имеются ли в партии из N деталей бракованные. Если да, то подсчитать их количество, иначе выдать отрицательный ответ. Дана неубывающая последовательность действительных чисел a1, a2, …an. Вставить...
множества точек C++
помогите Даны два множества точек на плоскости. Выбрать четыре различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь. не знаю с чего начать
C++ Одномерный массив http://www.cyberforum.ru/cpp-beginners/thread298824.html
Помогите пожалуйста!!! 1)Сформировать одномерный массив используя датчик случайных чисел 2)Распечатать полученный массив 3)Удалить последний элемент равный 0 4)Добавить после элемента с заданным индексом элемент со значением 100 5)Распечатать полученный массив
C++ Волновой алгоритм Доброго времени суток, дорогие форумчане. Никак не додумаю волновой алгоритм, помогите, кто чем может: файл - матрица целых чисел, где минимальное число - начало, а начало+1 - конец. #include "stdafx.h" #include <stdlib.h> #include <iostream> #include <Windows.h> using namespace std; int** file(int &m);//Считывание карты void show(int** map,int m);//вывод карты подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
19.05.2011, 02:24     Переименовать и скрыть папку, программно.
Код вообще охренительный, некоего Юры (кстати, он ошибся в исходнике), рекурсивно проходит по папкам и выводит чё надо, я его каждый раз под свои нужды шлифую просто и всё, цепляю чё мне надо. Не очень читаемый, зато функциональный.

Короче разбирайся, тут много отладочной инфы и вообще аппендициты могут быть, если чё говори, я её уберу. Имя папки, думаю, разберёшься куда пихать. Если чё спрашивай. Компилятор 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 минут
короче чует моё сердце накличем мы беду на свою голову с этой темой.
 
Текущее время: 15:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru