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

[C++] Работа с файлами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Среднее геометрическое http://www.cyberforum.ru/cpp-beginners/thread146875.html
Нужно написать програму для нахождения среднего геометрического. тоесть по сути нужна функция для извлечения корня н-го степеня из заданого числа. например корень 3 степени из 8 =2
C++ Вывести часть строки есть текст в нём встречаются ссылки типа http://адрес1/адрес 2 пробелов нет, необходимо вывести адрес1 http://www.cyberforum.ru/cpp-beginners/thread146868.html
C++ ищу электронную книгу, в которой бы было написано про графы в с
хочу скачать бесплатно книгу, в которой бы было написано про графы, формы их представления, достижимость и обходы, алгоритмы Дейкстры! или что угодно по это! очень нужно очень срочно, скоро экзамен, а теории нет :(
C++ Количество вхождений цифры в число (с++)
Помогите с задачей. Дано натуральное число n. Узнать, сколько раз в нём встречается цифра а; Часть(?) программы: #include <conio.h> #include <iostream.h> #include <math.h> void main() { clrscr();
C++ напишите прграмму для поиска простых чисел в интервале 1 до 100 http://www.cyberforum.ru/cpp-beginners/thread146848.html
напишите прграмму для поиска простых чисел в интервале 1 до 100 СРОЧНО Я НА ЭКЗАМЕНЕ ПОМОГИТЕ ПОЖАЛУЙТА!!!
C++ Найти сумму всех элементов массива, кратных 4 Найти сумму всех элементов массива, кратных 4. При составлении программы для обработки массивов, имя массива считать указателем на его первый элемент подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,299
18.06.2010, 09:50     [C++] Работа с файлами
Парень, вот тебе код, напиши вместо "С:" нужное тебе имя папки, скомпиль (у меня DEV C++ 4.9.9.2), запусти и получай все файлы exe, которые в ней есть. С именами директорий. Так, тебе надо *txt? Разберёшься сам, я думаю....

(Нормальные пацаны умеют задавать имя папки и расширение в консоли, кстати...)

...Сразу скажу, код не мой, а некоего Юры. Но я оригинал переработал и указал автору на некоторые ошибки. В этой теме. Так что я в некотором (думаю, немалом) смысле соавтор сей проги

...Чё за переменная rez, я забыл уже. Может, количество файлов? Кто его знает... В общем, вперёд, мой юный друг, покорять, тык скыть вершины олимпа!
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
#include <windows.h>
#include <stdio.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT);
 
int main(){
 
//Поскольку sPath и sExt и sEXT одинаковы во всех вызовах GetFileList, их можно было бы сделать
//глобальными, но я так оставил. 
        char sPath[MAX_PATH]= "C:";
 
//Обратить  внимание на размер массива!
        char sExt[10]= "exe";
        char sEXT[10]= "EXE";
        GetFileList(sPath, sExt, sEXT);
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
      printf("rez= %d\n", rez);
  system ("PAUSE");
}
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT) {
 
 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);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
   }
   else {
    //Проверяем на соотвествие sExt расширения pFILEDATA.cFileName
    if((chBuf = strrchr(pFILEDATA.cFileName,'.'))) {
     if(strstr(chBuf + 1,sExt)|| strstr(chBuf + 1,sEXT)) {
      //Если не будем использовать CharToOem() то на экране русский шрифт каракулями выйдет
      CharToOem(sPath,sPath);
      printf("%s",sPath);
      OemToChar(sPath,sPath);
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
     }
    }
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
 
Текущее время: 01:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru