Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > просмотр файлов каталога


Автор: nas-alex 10.6.2004, 08:16

списсок содержит информацию о файлах дирректории, все строки выводит привильно, за исключением имени файла, выводит для всех строк имя последнего добавленного файла.

не подскажете где ошибка в этом коде?
у меня в этом списке 5 строк, содержащие информацию о файлах дирректории, все строки выводит привильно, за исключением имени файла, выводит для всех строк имя последнего добавленного файла.

#include "stdafx.h"
#include <windows.h>
#include "stl.h"

struct file_list
{
char *name;
int size;
};

typedef list<file_list> listfile;
listfile lstfile;

int main(int argc, char *argv[])
{
file_list *fs=new file_list;
HANDLE hFile;
WIN32_FIND_DATA find;
char *path="c:\\test\\*.*";
if(hFile=FindFirstFile(path,&find))
{
fs->name=find.cFileName;
fs->size=find.nFileSizeLow;
lstfile.push_back(*fs);
while(FindNextFile(hFile,&find))
{

file_list *fs=new file_list;
char file_name[13];
strncpy(file_name,find.cFileName,13);
fs->name=file_name;
fs->size=find.nFileSizeLow;
lstfile.push_front(*fs);
}

}

for (listfile::iterator it=lstfile.begin();it!=lstfile.end();it++)
{
printf("%s %d\n",it->name,it->size);
}
return 0;

}

Автор: AndyY 10.6.2004, 10:01
char file_name[13];
strncpy(file_name,find.cFileName,13);
fs->name=file_name;

ошибка тут. нужно:
fs->name=strdup( find.cFileName );
и освободить, естественно, при убивании fs через free.

а потом внимательно разобраться - какая переменная где хранится и каково время жизни переменных, которые в стеке сидят.

Автор: Олег М 10.6.2004, 11:30
Andy Y в общем правильно подсказал, хотя можно и без динамического выделения памяти

struct file_list
{
char name[MAX_PATH];
int size;
};

//////////////////////////

if(hFile=FindFirstFile(path,&find))
{
//fs->name=find.cFileName;
strcpy(fs->name,find.cFileName);
fs->size=find.nFileSizeLow;
lstfile.push_back(*fs);
while(FindNextFile(hFile,&find))
{

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)