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

предлагаю программу людям "альтернативное копирование файлов в проводнике" - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
10.07.2011, 23:39     предлагаю программу людям "альтернативное копирование файлов в проводнике" #1
Суть: программа копирует файл, который передаётся ей параметром командной строки. То есть: в первую очередь программу следует сделать встроенной в проводник. Делается это так: здесь скачивается программа, которая добавляет в реестр нужные вам проги. Компилим мою прогу
C++
1
g++ ra.cpp
Полученный экзешник пихаем в любую папку, полное имя которой НЕ СОДЕРЖИТ ПРОБЕЛОВ. После с помощью скачанной проги добавляем этот экзешник в меню проводника (можно и вручную поправить реестр кто умеет, там ничё сложного) и озаглавливаем пункт так: "копирование как мне надо"

//++++++++++++++++++++++++++++++++++++++++++++++

После все действия знакомы. Правой кнопкой на файл file.txt-> копирование как мне надо
В папке появляется файл file_0.txt
Повторяем действие, в папке появляется файл file_1.txt; повторяем ещё раз, имеем файл file_2.txt
...Так, а что будет, если сейчас мы скорпируем file_1.txt? Пробуем
Правой кнопкой на файл file_1.txt-> копирование как мне надо
Получаем file_3.txt! Предсказуемо!

Корректно работает с русским языком и пробелами.

................................................................

Приложение консольное, поэтому появляется окошко и тут же исчезает, это легко убрать, я могу это сделать. В листинге закомментирована вся отладочная информация, кому не нужна, уберите, кто решит поковыряться, скажите, я сам уберу- без неё прога много симпатичнеей, но она может пригодиться, вот в чём дело. Кто будет пользоваться, все ошибки сюда!! Бум исправлять!! Тестировано на XP home потому, что мне надоело копировать файлы по их варианту с "копия". Короче, на вкус и цвет, что называется.

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
196
197
198
199
#include <Windows.h> 
#include <stdio.h> 
#include <ctype.h> 
#include <iostream> 
#include <set> 
using namespace std;
 
//Эта функция выполняет начальные преобразования, а именно:
//заполняет    строку poln_ima_bez_rash_i_bez__chislo (даже если расширения нет!
//_chislo это строка вида _число, его тоже надо вычленять (если оно есть и в отдельную строку запихивать)) 
//и строку rashirenie; если расширения нет, пишет туда ноль
//И вот заполняется строка _chislo, если такого в имени файла нет, тот туда пишется ноль  
void nach_preobr (char* polnoe_ima_faila, char* poln_ima_bez_rash_i_bez__chislo, char* rashirenie, char* _chislo);
 
//Функция формирует полное имя файла, его и возвращает
char* poln_ima_fail (char* polnoe_ima_faila);
 
//Что делает эта функция, смотри в тексте проги
void f_poisk_pohozhih_failov (set<int>*, char*, int );
 
 
int main () {
    
 //Это флаг "есть ли расширение"
 //bool est_li_rashirenie;
 
 //Это вот расширение тут будет (если будет)
 char rashirenie [MAX_PATH]= {0};
 
 //Это вот строка _chislo
 char _chislo [MAX_PATH]= {0};
 
 //А вот тут полное имя файла без расширения и без _число
 char poln_ima_bez_rash_i_bez__chislo [MAX_PATH];
 
 //А вот полное имя файла пусть будет 
 char polnoe_ima_faila [MAX_PATH];
 
 //наёдём полное имя файла
 poln_ima_fail (polnoe_ima_faila);
 
 //Выполним с ним преобразования
 nach_preobr (polnoe_ima_faila, poln_ima_bez_rash_i_bez__chislo, rashirenie, _chislo);
// printf ("polnoe_ima_faila= %s   \n", polnoe_ima_faila);
// printf ("poln_ima_bez_rash_i_bez__chislo= %s   \n", poln_ima_bez_rash_i_bez__chislo);
// printf ("rashirenie= %s   \n", rashirenie);
// printf ("_chislo= %s   \n", _chislo);
 
 //ОТлично, теперь нам нужна строка: poln_ima_bez_rash_i_bez__chislo+звёздочка+расширение
 //(если есть), всю эту херь мы запхаем в функцию f_poisk_pohozhih_failov
 //Эта функция будет искать файлы, у которые соответсвуют переданной строке, ну то есть у которых 
 //грубо говоря, совпадают начало и конец
 //А потом эта функция будет смотреть, а что стоит между началом и концом
 //А стоять там должна строка вида _число, и вот если она стоит, то из таких чисел формируется вектор
 //<int>, который также передастся фв эту функцию
 //Вот цель этой функции
 //Так, а величины "длина poln_ima_bez_rash_i_bez__chislo" они нужны нам внутри этой функции,
 //чтобы их не вычислять внутри её, просто параметром передадим и всё 
 char shablon [MAX_PATH];
 char temp [MAX_PATH];
 strcpy (temp, poln_ima_bez_rash_i_bez__chislo);
 strcpy (shablon,  (strcat   (strcat (temp, "*"), rashirenie)));
// printf ("shablon= %s   \n", shablon);
// printf ("poln_ima_bez_rash_i_bez__chislo= %s   \n", poln_ima_bez_rash_i_bez__chislo);
 set<int> se;
 f_poisk_pohozhih_failov (&se,  shablon, strlen (poln_ima_bez_rash_i_bez__chislo)); 
 
 
 //ОТлично, теперь сформируем новое число в зависимост от того, пустой или нет se
 int novoe_chhislo;
 if (!se.size()) 
  novoe_chhislo= 0;
 else {
  set<int>::iterator it;
  it= se.end();
  it--;
  novoe_chhislo= *it+ 1; 
 }
 //сформировали новое число
 
 //printf ("novoe_chhislo= %d\n", novoe_chhislo);
 
 //Осталось скропать новое имя 
 char novoe_ima [MAX_PATH];
 char buffer [MAX_PATH];
 strcat(strcat(strcat(strcpy (novoe_ima, poln_ima_bez_rash_i_bez__chislo),"_"),itoa(novoe_chhislo, buffer, 10)), \
  rashirenie);
 //скропали новое имя
 
 
 //printf ("novoe_ima= %s\n", novoe_ima);
 
 //Теперь так: (последний аргумент не важен)
 CopyFile (polnoe_ima_faila, novoe_ima, true);           
}
 
//Ф У Н К Ц И И 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
char* poln_ima_fail (char* polnoe_ima_faila) {
 char* temp= GetCommandLine();
// printf ("=== %s\n", temp);
 temp= &temp[strlen(temp)];
 do {
  temp--;
 }
 while (*temp!= '"');
 temp+=2;
 strcpy (polnoe_ima_faila, temp);
 return polnoe_ima_faila;
};
 
//+++++++++++++++++++++++++++++++++
void nach_preobr (char* polnoe_ima_faila, char* poln_ima_bez_rash_i_bez__chislo, char* rashirenie, char* _chislo) {
 strcpy (poln_ima_bez_rash_i_bez__chislo, polnoe_ima_faila);
 char* temp= &polnoe_ima_faila[strlen(polnoe_ima_faila)];
 do {
  temp--;
 }
 while (*temp!='\\'&& *temp!= '.');
 
 if (*temp=='.') {
  strcpy (rashirenie, temp); 
  strcpy (poln_ima_bez_rash_i_bez__chislo, polnoe_ima_faila);
  poln_ima_bez_rash_i_bez__chislo [strlen(poln_ima_bez_rash_i_bez__chislo)- strlen(rashirenie)]= 0;
 }
 
 //Щас займёмся _chislo
 temp= &poln_ima_bez_rash_i_bez__chislo [strlen(poln_ima_bez_rash_i_bez__chislo)];
 do {
  temp--;
 }
 while (*temp!='\\'&& *temp!= '_');
// printf ("d d d d d d d d  %s   %d\n",  temp, temp [4]);
 if (*temp=='_') {
//  printf ("ddddddddddddddd  %s\n",  temp);
  char* temp_0= temp+ 1;
  for (;isdigit(*temp_0);temp_0++);
//  printf ("dddddfffffff  %d\n",  temp_0[0]);
  if (!*temp_0) {
//   printf ("yyyyyyyyyyyyyyddddddddddddddd  %s\n",  temp);
   strcpy (_chislo, temp+ 1);
   *temp= 0;
  }
 }
 
}
//+++++++++++++++++++++++++++++++++
void f_poisk_pohozhih_failov (set<int>* se,  char* shablon, int dlina_poln_ima_bez_rash_i_bez__chislo) {
//                        printf("%d \n\n\n\n", dlina_poln_ima_bez_rash_i_bez__chislo);
        
        //Ищем имя директории; не ищем, вернее, а устанавливаем
        char ima_dir [MAX_PATH];         
        strcpy (ima_dir, shablon);
        char* p= &ima_dir[strlen(ima_dir)];
        while (*--p!= '\\');
         *++p= 0;
        //Теперь ima_dir указывает на имя директории
 
        WIN32_FIND_DATA FindFileData;
        HANDLE hf;
        hf = FindFirstFile(shablon,&FindFileData);
        if(hf != INVALID_HANDLE_VALUE){
                do{
//                        printf("%s\n",FindFileData.cFileName);
                        strcat (ima_dir, FindFileData.cFileName);
                        //Теперь в ima_dir то, что нам и нужно; конец (расширение или отсутвие такового
                        //соответствуют шаблону), начало соответствет имени файла.
                        //Посмотрим, что в середине!   
//                        printf("%s\n", ima_dir);
                        char* temp= &ima_dir [dlina_poln_ima_bez_rash_i_bez__chislo+ 1];
//                        printf ("888 %s\n", temp);
                        
                        if (isdigit(*temp)) {
                          do {
                          temp++;
                         }
                         while (isdigit(*temp));
//                         printf ("333333 %c\n", *temp);
                         if (*temp== '.'|| *temp== 0) {
                          *temp= 0;
//                           printf ("=++ %s\n", &ima_dir [dlina_poln_ima_bez_rash_i_bez__chislo+ 1]);
                          (*se).insert(atoi(&ima_dir [dlina_poln_ima_bez_rash_i_bez__chislo+ 1]));
                         }
                        } 
                         
                        *p= 0;
 
              
                 
                }
                while(FindNextFile(hf,&FindFileData) != 0);
                FindClose(hf);
        }
 
}; 
//К О Н Е Ц   Ф У Н К Ц И Й
Первый месяц бесплатно!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2011, 23:39     предлагаю программу людям "альтернативное копирование файлов в проводнике"
Посмотрите здесь:

C++ предлагаю людям класс "рекурсивный обход матрицы" для решения задач на такую тематику
C++ предлагаю людям класс "каждому потоку- своё окно" для тестирования многопоточных приложений.
Предлагаю людям как усовершенствовать IDE Dev-Cpp 4.9.9.2 C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" C++
Предлагаю людям класс для написания специфических снимков системы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
11.07.2011, 02:05     предлагаю программу людям "альтернативное копирование файлов в проводнике" #41
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да ладно, это ж явно шутка была.
У меня неделя странная выдалась. Несколько вот таких шуток было, а потом оказалось, что люди вовсе не шутили, а и правда не в себе. Потому я и тут не удивлюсь, если автор это серьёзно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
11.07.2011, 02:06  [ТС]     предлагаю программу людям "альтернативное копирование файлов в проводнике" #42
grizlik78, я не хочу чтобы моей программой пользовались из командной строки, она не для этого предназначена. Как тебе ещё сказать, чтобы ты понял?

Или это как расценивать? Типа пожелания или чего? Ну так не повторяй больше, я понял всё. Ты недоволен, но по-другому не будет. До свидания.
voral
344 / 324 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
11.07.2011, 02:16     предлагаю программу людям "альтернативное копирование файлов в проводнике" #43
Цитата Сообщение от kravam Посмотреть сообщение
grizlik78, я не хочу чтобы моей программой пользовались из командной строки, она не для этого предназначена.
Чессово интересно: а какой смысл этого ограничения? Может имело смысл тогда просто модуль к проводнику написать, а не консольное приложение?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.07.2011, 02:21     предлагаю программу людям "альтернативное копирование файлов в проводнике" #44
voral, он же написал
Цитата Сообщение от kravam Посмотреть сообщение
... программу следует сделать встроенной в проводник. Делается это так: здесь скачивается программа, которая добавляет в реестр нужные вам проги.

Полученный экзешник пихаем в любую папку, полное имя которой НЕ СОДЕРЖИТ ПРОБЕЛОВ. После с помощью скачанной проги добавляем этот экзешник в меню проводника (можно и вручную поправить реестр кто умеет, там ничё сложного) и озаглавливаем пункт так: "копирование как мне надо"
пс: классно тут у вас.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2011, 02:40     предлагаю программу людям "альтернативное копирование файлов в проводнике"
Еще ссылки по теме:

C++ разработать программу для работы со строками: найти и заменить в ней все символы "а" на "b"
C++ Написать программу которaя запрашиваeт у пользователя номер дня недели, затем выводит одно из сообщений "рабочий день", "суббота", "воскресенье"
C++ Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
11.07.2011, 02:40  [ТС]     предлагаю программу людям "альтернативное копирование файлов в проводнике" #45
Может и модуль, но я не умею.

Никакого особого смысла. Просто меня не устраивает как копирует и именует копированные файлы винда (в эту же папку), а делаю я это преимущественно проводником. Решил написать ему альтернативу (не ему, а возможности, которая в нём есть). Всё! А людям хоца через командную строку.

Ну так попробуйте, может и получится, я не тестил. Ибо без надобности!

Добавлено через 2 минуты
voral, не, ну так-то нормально. Среди всего этого- не побоюсь этого слова- болота, которым по сути является этот раздел, найти мою тему и посоветовать написать модуль к проводнику...

Добавлено через 15 минут
DLL что ли накропать? С меня ведь станет, я накропаю. А всё равно будет плохо, на вас не угодишь.
Yandex
Объявления
11.07.2011, 02:40     предлагаю программу людям "альтернативное копирование файлов в проводнике"
Ответ Создать тему
Опции темы

Текущее время: 22:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru