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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Языки программирования http://www.cyberforum.ru/cpp-beginners/thread331648.html
Есть код программы #include <iostream> #include <stdlib.h> using namespace std; int main() { size_t size;
C++ Русские буквы консоли Знаю что таких тембыло очень много, но у меня никак не получается вывести слово "Привет" в консоли. Пробую так setlocale(LC_ALL,"Russian"); так wcout.imbue(locale("rus_rus.866")); и так SetConsoleOutputCP(1251); Но не один не работает. Как же мне вывести русские буквы? http://www.cyberforum.ru/cpp-beginners/thread331644.html
Вывод текста на консоль, закарючки вместо букв C++
Я создал консольное win32 приложение в vs2010. Попробовал cout'ом вывести текст русскими буквами - вылезли разные закарючки. Ну эту проблему я уже видел))). НО!!! Когда попытался такимже способом вывести английский текст - СНОВА вылезли разные закарючки!!! Что делать:wall:?! Помогите!!! Пожзяяяяяяяялуста:cry: P.S. Заранее благодарю!:)
C++ Возвод в степень
Здравствуйте дорогие форумчане, у Вас на сайте видел я код программы для вычисления огромных факториалов #include "StdAfx.h" #include <stdio.h> #include <iostream> #include <sstream> #include <vector> #define base 1000000000
C++ С чего начать учить? http://www.cyberforum.ru/cpp-beginners/thread331609.html
Посоветуйте учебные пособия и IDE для изучения C++
C++ Текст и графика Всем привет.Не разобрался пока с текстом и графикой,1 задача дан текст,нужно сделать корректировку,если встретятся символы:$-красная строка(7 пробелов),#-удалить следующее слово,@-удалить следующую фразу. И подскажите как нарисовать звезду,чтобы она двигалась по экрану,можно из линий:\-/| #include <stdio.h> #include <conio.h> #include <graphics.h> #include <dos.h> #include <stdlib.h>... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,424

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

10.07.2011, 23:39. Просмотров 2375. Ответов 44
Метки (Все метки)

Суть: программа копирует файл, который передаётся ей параметром командной строки. То есть: в первую очередь программу следует сделать встроенной в проводник. Делается это так: здесь скачивается программа, которая добавляет в реестр нужные вам проги. Компилим мою прогу
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);
        }
 
}; 
//К О Н Е Ц   Ф У Н К Ц И Й
Первый месяц бесплатно!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru