Форум программистов, компьютерный форум 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. При составлении программы для обработки массивов, имя массива считать указателем на его первый элемент подробнее

Показать сообщение отдельно
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 14:36  [ТС]     [C++] Работа с файлами
kazak, спасибо

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
#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]= "txt";
        char sEXT[10]= "TXT";
        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++;
                FILE *out = fopen( "booklist.txt", "a" );
                fprintf( out, "%s\%s\n", sPath, pFILEDATA.cFileName);     }
    }
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
Вот общими усилиями собрали, работает, но выкидывает ошибку видимо при переполнении, как вы говорили fflush использовать?

Добавлено через 12 минут
Инструкция по адресу "0x7c901010" обратилась к памяти по адресу "0x00000034". Память не может быть "read"

7C901010 cmp dword ptr [edx+14h],0

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