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

Указатели и разадресация - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 5.00
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
01.04.2013, 22:38     Указатели и разадресация #1
Программа осуществляет поиск файлов и их сортировку. В массив, хранящий атрибуты найденных файлов заносятся адреса атрибутов а не нужная мне инфа(насколько я понял). Помогите плз,третий вечер сижу...
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"
#include "io.h"
#include "time.h"
#include "cstringt.h"
#include "iostream"
#include "iomanip"
#include <fstream>
#include <string>
#define _CRT_SECURE_NO_WARNINGS
 
    struct list
   {
     struct _finddata_t *findD;
     list *next, *prev;
   };
 
 
// Ищет файлы на диске
bool FindFile(char *Path, char *Mask);
// Выводит найденную информацию на экран монитора и в файл
void PrintData(char *NameFile, struct _finddata_t *findData);
// Выводитна экрнан меню
int Menu(void);
 
// Прототипы функций сравнения
int CompareNameFile( const void *arg1, const void *arg2 );
int CompareSizeFile( const void *arg1, const void *arg2 );
int CompareDateFile( const void *arg1, const void *arg2 );
 
using namespace std;
 _CRT_SECURE_NO_WARNINGS;
// Глобальные переменные
int g_SumFile = 0;     // Количество найденных файлов
 list *ph = NULL;
 
void Add(struct _finddata_t *findData)
 {  
    list *q = new list;
    q->next=ph;
    q->findD= findData;
    ph=q;}
  
int _tmain(int argc, _TCHAR* argv[])
{
   int i;
   char File[] = "File.txt";
   char FileSortName[] = "FileSortName.txt";
   char FileSortSize[] = "FileSortSize.txt";
   char FileSortDate[] = "FileSortDate.txt";
   struct _finddata_t *findData;
   struct _finddata_t *find;
   char Path[] = "G:\\" ;
   char Mask[] = "*.exe";
   setlocale(LC_ALL, "Russian_Russia.1251");
 
   // Код ввода данных
 
g_SumFile = 0; // Обнуляем счетчик найденных файлов
FindFile(Path, Mask); //Рекурсивный поиск файлов на диске
 
//Динамическое выделение памяти для массива
find = new _finddata_t[g_SumFile];
list *q;
q=ph;
i=0;
 while (i<g_SumFile) 
 {   
              strcpy (find[i].name,q->findD->name);
              find[i].size=q->findD->size;
              find[i].time_create=q->findD->time_create;
            q=q->next;
            i++;
            }
while (ph!=NULL) {
q = ph;
ph = ph->next ;
delete q;
}
 
 
PrintData(File, find);
_getch();
 
do
{
    //Вывод на экран меню
    int NumbMenu = Menu();
    switch(NumbMenu)
    {
    case 0:  //заканчиваем работу
         delete[] find;
         return 0;
    case 1:
         qsort((void*)find, g_SumFile,
             sizeof(find[0]), CompareNameFile);
         // Выводим найденную информацию на экран и в файл
         PrintData(FileSortName, find);
         _getch();
         break;
    case 2:
         qsort((void*)find, g_SumFile,
              sizeof(find[0]), CompareSizeFile);
         // Выводим найденную информацию на экран и в файл
         PrintData(FileSortSize, find);
         _getch();
         break;
    case 3:
         qsort((void*)find, g_SumFile,
              sizeof(find[0]), CompareDateFile);
         // Выводим найденную информацию на экран и в файл 
         PrintData(FileSortDate, find);
         _getch();
         break;
     }
   } while(1);
   _getch();
   delete[] findData;
   return 0;
 }
//////////////////////////////////////////////////////////////////
// Функция сравнения по имени файлов
int CompareNameFile( const void *a1, const void *a2 )
{
struct _finddata_t *item1=(struct _finddata_t*)a1;
    struct _finddata_t *item2=(struct _finddata_t*)a2;
 
        return (_stricmp(item1->name,item2->name));
}
int CompareDateFile( const void *a1, const void *a2 )
{
struct _finddata_t *item1=(struct _finddata_t*)a1;
    struct _finddata_t *item2=(struct _finddata_t*)a2;
 
    if (item1->time_create<item2->time_create) return -1;
    else if (item1->time_create>item2->time_create) return 1;
    return 0;
}
int CompareSizeFile( const void *a1, const void *a2 )
{
struct _finddata_t *item1=(struct _finddata_t*)a1;
    struct _finddata_t *item2=(struct _finddata_t*)a2;
 
    if (item1->size<item2->size) return -1;
    else if (item1->size>item2->size) return 1;
    return 0;
}        
         
///////////////////////////////////////////////////////////////////
// Выыодит меню на экран
int Menu(void)
{
    int n;
    cout<<"Команды меню: "<<endl;
    cout<<"0 - завершение работы."<<endl;
    cout<<"1 - сортировка найденных файлов по имени."<<endl;
    cout<<"2 - сортировка найденных файлов по размеру."<<endl;
    cout<<"3 - сортировка найденных файлов по дате создания."<<endl;
    cout<<"\nВведите команду меню: ";
    cin>>n;
    return n;
 
}
 
 
////////////////////////////////////////////////////////////////////
// Рекурсивный поиск файлов на диске
bool FindFile(char *Path, char *Mask)
{
int i=0;
    struct _finddata_t findData;
    intptr_t hFile;
    char FullName1[_MAX_PATH];
    strcpy_s(FullName1,_MAX_PATH-1,Path);
    strcat_s(FullName1,_MAX_PATH-1,"*.*");
    if ( (hFile=_findfirst(FullName1,&findData))!=-1L)
        do
        {
            if (findData.attrib==_A_SUBDIR &&
                (_strcmpi(findData.name,".") &&
                _strcmpi(findData.name,"..")))
            {
                char NextPatch[_MAX_PATH];
                strcpy_s(NextPatch,_MAX_PATH-1,Path);
                strcat_s(NextPatch,_MAX_PATH-1,findData.name);
                strcat_s(NextPatch,_MAX_PATH-1,"\\");
                FindFile(NextPatch,Mask);
            }
        }while(_findnext(hFile,&findData)==0);
        char FullName2[_MAX_PATH];
        strcpy_s(FullName2,_MAX_PATH-1,Path);
        strcat_s(FullName2,_MAX_PATH-1,"\\");
        strcat_s(FullName2,_MAX_PATH-1,Mask);
        
        if ((hFile=_findfirst(FullName2,&findData))==-1L)
            return true;
        do
        {
            g_SumFile++;
 
            Add(&findData);
            /*while (i!=g_SumFile) {
            list *q = new list;
            
            q->list::findD->size=findData.size;
            q->next=ph;
            ph=q;
            i++;
            }
            */
        } while(_findnext(hFile,&findData)==0);
        _findclose(hFile);
    return true;
}
 
 
void PrintData(char *NameFile, struct _finddata_t *find)
{
ofstream file(NameFile);
 
int i=0;
  while (i!=g_SumFile)
   {
       cout<<"Файл : "<<find[i].name<<" "<<"Размер файла :"<<find[i].size<<"Датасоздания :"<<find[i].time_create<<endl;
     
       
               
       file<<"Файл : "<<find[i].name<<" "<<"Размер файла :"<<find[i].size<<"Датасоздания :"<<find[i].time_create<<endl;
       
       
       
       i++;
       
   }
}
Пример работы:
Миниатюры
Указатели и разадресация  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
01.04.2013, 23:01     Указатели и разадресация #2
Отвечай на вопросы. Имеем:
C++
1
char Path[] = "E:\\put\\";
В папке E:\put три экзешника:
main_0.exe, main_1.exe и main_2.exe и больше ничего нет
Я правильно понял, что
C++
1
PrintData(File, find);
должна вывести эти имена+ какие-то там атрибуты?
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 01:13  [ТС]     Указатели и разадресация #3
именно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
02.04.2013, 01:29     Указатели и разадресация #4
Ну вот этим и займись. Создай папку
C:\put
и запихай туда три экзешника. Добейся сперва чтобы PrintData правильно все имена вывела, а то у меня выводит три раза подряд имя main_2.exe с какими-то якобы атрибутами.
А потом будем двигаться дальше. Спрашивай, что непонятно.
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 01:41  [ТС]     Указатели и разадресация #5
Тут косяк с заносом атрибутов в структуру list из findData в строке 202, в этом я убедился, а PrintData работает нормально.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
02.04.2013, 01:57     Указатели и разадресация #6
Ну как знаешь
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 19:27  [ТС]     Указатели и разадресация #7
А я думал мне хоть здесь помогут...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.04.2013, 19:38     Указатели и разадресация #8
Рызыменование знаю, разадресацию впервые вижу.
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 19:59  [ТС]     Указатели и разадресация #9
Код чутка переделал, теперь вот что получается:
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"
#include "io.h"
#include "time.h"
#include "cstringt.h"
#include "iostream"
#include "iomanip"
#include <fstream>
#include <string>
#define _CRT_SECURE_NO_WARNINGS
 
    struct list
   {
     struct _finddata_t *findD;
     list *next;
   };
 
 
// Ищет файлы на диске
bool FindFile(char *Path, char *Mask);
// Выводит найденную информацию на экран монитора и в файл
void PrintData(char *NameFile, struct _finddata_t *findData);
// Выводитна экрнан меню
int Menu(void);
 
// Прототипы функций сравнения
int CompareNameFile( const void *arg1, const void *arg2 );
int CompareSizeFile( const void *arg1, const void *arg2 );
int CompareDateFile( const void *arg1, const void *arg2 );
 
using namespace std;
 _CRT_SECURE_NO_WARNINGS;
// Глобальные переменные
int g_SumFile = 0;     // Количество найденных файлов
 list *ph = NULL;
 
void Add(struct _finddata_t *findData)
 {  
    list *q = new list;
    q->next=ph;
    q->findD= findData;
    ph=q;
    }
  
int _tmain(int argc, _TCHAR* argv[])
{
   int i;
   char File[] = "File.txt";
   char FileSortName[] = "FileSortName.txt";
   char FileSortSize[] = "FileSortSize.txt";
   char FileSortDate[] = "FileSortDate.txt";
   struct _finddata_t *findData;
   struct _finddata_t *find;
   char Path[] = "G:\\" ;
   char Mask[] = "*.torrent";
   setlocale(LC_ALL, "Russian_Russia.1251");
 
   // Код ввода данных
 
g_SumFile = 0; // Обнуляем счетчик найденных файлов
FindFile(Path, Mask); //Рекурсивный поиск файлов на диске
 
//Динамическое выделение памяти для массива
find = new _finddata_t[g_SumFile];
list *q;
q=ph;
i=0;
 while (q!=NULL) 
 {   
              strcpy(find[i].name, q->findD->name);
              find[i].size=q->findD->size;
              find[i].time_create=q->findD->time_create;
    /* find[i]=q->findD;*/
            q=q->next;
            i++;
            }
while (ph!=NULL) {
q = ph;
ph = ph->next ;
delete q;
}
 
 
PrintData(File, find);
_getch();
 
do
{
    //Вывод на экран меню
    int NumbMenu = Menu();
    switch(NumbMenu)
    {
    case 0:  //заканчиваем работу
         delete[] find;
         return 0;
    case 1:
         qsort((void*)find, g_SumFile,
             sizeof(find[0]), CompareNameFile);
         // Выводим найденную информацию на экран и в файл
         PrintData(FileSortName, find);
         _getch();
         break;
    case 2:
         qsort((void*)find, g_SumFile,
              sizeof(find[0]), CompareSizeFile);
         // Выводим найденную информацию на экран и в файл
         PrintData(FileSortSize, find);
         _getch();
         break;
    case 3:
         qsort((void*)find, g_SumFile,
              sizeof(find[0]), CompareDateFile);
         // Выводим найденную информацию на экран и в файл 
         PrintData(FileSortDate, find);
         _getch();
         break;
     }
   } while(1);
   _getch();
   delete[] findData;
   return 0;
 }
//////////////////////////////////////////////////////////////////
// Функция сравнения по имени файлов
int CompareNameFile( const void *a1, const void *a2 )
{
struct _finddata_t *item1=(struct _finddata_t*)a1;
    struct _finddata_t *item2=(struct _finddata_t*)a2;
 
        return (_stricmp(item1->name,item2->name));
}
int CompareDateFile( const void *a1, const void *a2 )
{
struct _finddata_t *item1=(struct _finddata_t*)a1;
    struct _finddata_t *item2=(struct _finddata_t*)a2;
 
    if (item1->time_create<item2->time_create) return -1;
    else if (item1->time_create>item2->time_create) return 1;
    return 0;
}
int CompareSizeFile( const void *a1, const void *a2 )
{
struct _finddata_t *item1=(struct _finddata_t*)a1;
    struct _finddata_t *item2=(struct _finddata_t*)a2;
 
    if (item1->size<item2->size) return -1;
    else if (item1->size>item2->size) return 1;
    return 0;
}        
         
///////////////////////////////////////////////////////////////////
// Выыодит меню на экран
int Menu(void)
{
    int n;
    cout<<"Команды меню: "<<endl;
    cout<<"0 - завершение работы."<<endl;
    cout<<"1 - сортировка найденных файлов по имени."<<endl;
    cout<<"2 - сортировка найденных файлов по размеру."<<endl;
    cout<<"3 - сортировка найденных файлов по дате создания."<<endl;
    cout<<"\nВведите команду меню: ";
    cin>>n;
    return n;
 
}
 
 
////////////////////////////////////////////////////////////////////
// Рекурсивный поиск файлов на диске
bool FindFile(char *Path, char *Mask)
{
int i=0;
    struct _finddata_t findData;
    intptr_t hFile;
    char FullName1[_MAX_PATH];
    strcpy_s(FullName1,_MAX_PATH-1,Path);
    strcat_s(FullName1,_MAX_PATH-1,"*.*");
    if ( (hFile=_findfirst(FullName1,&findData))!=-1L)
        do
        {
            if (findData.attrib==_A_SUBDIR &&
                (_strcmpi(findData.name,".") &&
                _strcmpi(findData.name,"..")))
            {
                char NextPatch[_MAX_PATH];
                strcpy_s(NextPatch,_MAX_PATH-1,Path);
                strcat_s(NextPatch,_MAX_PATH-1,findData.name);
                strcat_s(NextPatch,_MAX_PATH-1,"\\");
                FindFile(NextPatch,Mask);
            }
        }while(_findnext(hFile,&findData)==0);
        char FullName2[_MAX_PATH];
        strcpy_s(FullName2,_MAX_PATH-1,Path);
        strcat_s(FullName2,_MAX_PATH-1,"\\");
        strcat_s(FullName2,_MAX_PATH-1,Mask);
        
        if ((hFile=_findfirst(FullName2,&findData))==-1L)
            return true;
        do
        {
            g_SumFile++;
                                       // Список пустой
        
            Add(&findData);
            //while (i!=g_SumFile) {
            /*list *q = new list;
            q->findD=&findData;
            q=q->next;
            ph=q;
            */
 
            //i++
            
        } while(_findnext(hFile,&findData)==0);
        _findclose(hFile);
    return true;
}
 
 
void PrintData(char *NameFile, struct _finddata_t *find)
{
ofstream file(NameFile);
 
int i=0;
  while (i!=g_SumFile)
   {
       cout<<"Файл : "<<find[i].name<<" "<<"Размер файла :"<<find[i].size<<" Датасоздания :"<<find[i].time_create<<endl;
       file<<"Файл : "<<find[i].name<<" "<<"Размер файла :"<<find[i].size<<" Датасоздания :"<<find[i].time_create<<endl;
       i++;
       
   }
}
Миниатюры
Указатели и разадресация  
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 20:01  [ТС]     Указатели и разадресация #10
Косяк в функции Add . Почему заносится лишь последний файл?
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
02.04.2013, 20:05     Указатели и разадресация #11
удалить
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 20:14  [ТС]     Указатели и разадресация #12
Что удалить?
kravam
02.04.2013, 20:35
  #13

Не по теме:

Слушай, дружище, не обижайся, если ты определил что косяк в функции Add, какого рожна ты паровозом выкладываешь всё остальное, всю реализацию меню? Ты думаешь, что людям по кайфу будет видеть, на что ты способен? Я создаю тему, делаю код минимальным, а изначально он много больше твоего. И мне помогают. А тебе- ну если кто-то захочет разбираться в явно ненужных перипитиях... Убирай на фиг меню вообще, вызывай Add и ВСЁ НА ЭТОМ. Остальное в топку.

RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 20:40  [ТС]     Указатели и разадресация #14
мда...

Добавлено через 55 секунд
Add
C++
1
2
3
4
5
6
7
void Add(struct _finddata_t *findData)
 {  
    list *q = new list;
    q->next=ph;
    q->findD= findData;
    ph=q;
    }
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 20:49  [ТС]     Указатели и разадресация #15
Если наглядно:
Миниатюры
Указатели и разадресация   Указатели и разадресация   Указатели и разадресация  

RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 20:49  [ТС]     Указатели и разадресация #16
Так норм?
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
02.04.2013, 21:08     Указатели и разадресация #17
Полегче на поворотах. Вот как должно быть.
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
#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"
#include "io.h"
#include "time.h"
#include "cstringt.h"
#include "iostream"
#include "iomanip"
#include <fstream>
#include <string>
#define _CRT_SECURE_NO_WARNINGS
 
    struct list
   {
     struct _finddata_t *findD;
     list *next;
   };
 
 
// Ищет файлы на диске
bool FindFile(char *Path, char *Mask);
 
using namespace std;
 _CRT_SECURE_NO_WARNINGS;
// Глобальные переменные
int g_SumFile = 0;     // Количество найденных файлов
 list *ph = NULL;
 
void Add(struct _finddata_t *findData)
 {  
    list *q = new list;
    q->next=ph;
    q->findD= findData;
    ph=q;
    }
  
int _tmain(int argc, _TCHAR* argv[])
{
   int i;
   char File[] = "File.txt";
   char FileSortName[] = "FileSortName.txt";
   char FileSortSize[] = "FileSortSize.txt";
   char FileSortDate[] = "FileSortDate.txt";
   struct _finddata_t *findData;
   struct _finddata_t *find;
   char Path[] = "G:\\" ;
   char Mask[] = "*.torrent";
   setlocale(LC_ALL, "Russian_Russia.1251");
 
   // Код ввода данных
 
g_SumFile = 0; // Обнуляем счетчик найденных файлов
FindFile(Path, Mask); //Рекурсивный поиск файлов на диске
 
   return 0;
 }
       
 
 
////////////////////////////////////////////////////////////////////
// Рекурсивный поиск файлов на диске
bool FindFile(char *Path, char *Mask)
{
int i=0;
    struct _finddata_t findData;
    intptr_t hFile;
    char FullName1[_MAX_PATH];
    strcpy_s(FullName1,_MAX_PATH-1,Path);
    strcat_s(FullName1,_MAX_PATH-1,"*.*");
    if ( (hFile=_findfirst(FullName1,&findData))!=-1L)
        do
        {
            if (findData.attrib==_A_SUBDIR &&
                (_strcmpi(findData.name,".") &&
                _strcmpi(findData.name,"..")))
            {
                char NextPatch[_MAX_PATH];
                strcpy_s(NextPatch,_MAX_PATH-1,Path);
                strcat_s(NextPatch,_MAX_PATH-1,findData.name);
                strcat_s(NextPatch,_MAX_PATH-1,"\\");
                FindFile(NextPatch,Mask);
            }
        }while(_findnext(hFile,&findData)==0);
        char FullName2[_MAX_PATH];
        strcpy_s(FullName2,_MAX_PATH-1,Path);
        strcat_s(FullName2,_MAX_PATH-1,"\\");
        strcat_s(FullName2,_MAX_PATH-1,Mask);
        
        if ((hFile=_findfirst(FullName2,&findData))==-1L)
            return true;
        do
        {
            g_SumFile++;
                                       // Список пустой
        
            Add(&findData);
            //while (i!=g_SumFile) {
            /*list *q = new list;
            q->findD=&findData;
            q=q->next;
            ph=q;
            */
 
            //i++
            
        } while(_findnext(hFile,&findData)==0);
        _findclose(hFile);
    return true;
}
Вот и всё. Вот теперь спокойно разбирайся с Add. Этот код можно показывать людям, поубирай хидеры лишние. только.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 21:15     Указатели и разадресация
Еще ссылки по теме:

C++ Разадресация указателя в массив из указателей
C++ Неправильная разадресация указателя на массив в цикле
Указатели на массивы. Указатели и функции C++

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

Или воспользуйтесь поиском по форуму:
RRus
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 13
02.04.2013, 21:15  [ТС]     Указатели и разадресация #18
Без лишних хидеров:
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
 
#include "stdafx.h"
#include "conio.h"
#include "io.h"
#include "iostream"
#include <fstream>
 struct list
   {
     struct _finddata_t *findD;
     list *next;
   };
 
 
// Ищет файлы на диске
bool FindFile(char *Path, char *Mask);
 
using namespace std;
 _CRT_SECURE_NO_WARNINGS;
// Глобальные переменные
int g_SumFile = 0;     // Количество найденных файлов
 list *ph = NULL;
 
void Add(struct _finddata_t *findData)
 {  
    list *q = new list;
    q->next=ph;
    q->findD= findData;
    ph=q;
    }
  
int _tmain(int argc, _TCHAR* argv[])
{
   int i;
   char File[] = "File.txt";
   char FileSortName[] = "FileSortName.txt";
   char FileSortSize[] = "FileSortSize.txt";
   char FileSortDate[] = "FileSortDate.txt";
   struct _finddata_t *findData;
   struct _finddata_t *find;
   char Path[] = "G:\\" ;
   char Mask[] = "*.torrent";
   setlocale(LC_ALL, "Russian_Russia.1251");
 
   // Код ввода данных
 
g_SumFile = 0; // Обнуляем счетчик найденных файлов
FindFile(Path, Mask); //Рекурсивный поиск файлов на диске
 
   return 0;
 }
       
 
 
////////////////////////////////////////////////////////////////////
// Рекурсивный поиск файлов на диске
bool FindFile(char *Path, char *Mask)
{
int i=0;
    struct _finddata_t findData;
    intptr_t hFile;
    char FullName1[_MAX_PATH];
    strcpy_s(FullName1,_MAX_PATH-1,Path);
    strcat_s(FullName1,_MAX_PATH-1,"*.*");
    if ( (hFile=_findfirst(FullName1,&findData))!=-1L)
        do
        {
            if (findData.attrib==_A_SUBDIR &&
                (_strcmpi(findData.name,".") &&
                _strcmpi(findData.name,"..")))
            {
                char NextPatch[_MAX_PATH];
                strcpy_s(NextPatch,_MAX_PATH-1,Path);
                strcat_s(NextPatch,_MAX_PATH-1,findData.name);
                strcat_s(NextPatch,_MAX_PATH-1,"\\");
                FindFile(NextPatch,Mask);
            }
        }while(_findnext(hFile,&findData)==0);
        char FullName2[_MAX_PATH];
        strcpy_s(FullName2,_MAX_PATH-1,Path);
        strcat_s(FullName2,_MAX_PATH-1,"\\");
        strcat_s(FullName2,_MAX_PATH-1,Mask);
        
        if ((hFile=_findfirst(FullName2,&findData))==-1L)
            return true;
        do
        {
            g_SumFile++;
                                       // Список пустой
        
            Add(&findData);
            //while (i!=g_SumFile) {
            /*list *q = new list;
            q->findD=&findData;
            q=q->next;
            ph=q;
            */
 
            //i++
            
        } while(_findnext(hFile,&findData)==0);
        _findclose(hFile);
    return true;
}
Добавлено через 41 секунду
Тем не менее есть ли идеи?
Yandex
Объявления
02.04.2013, 21:15     Указатели и разадресация
Ответ Создать тему
Опции темы

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