如何把某一目录下所有的文件名列在ListBox中?

时间:2023-01-23 19:31:22
嗨,大家好:
    如何把某一目录下所有的文件名列在ListBox中?
如果使用ListBox的Dir()函数,得到的文件名是8、3格式,
会有Program~1.exe, Program~2.exe之类的,
而我需要的是文件完整的名字,如ProgramTom.exe, ProgramJack.exe。
     请指点!

8 个解决方案

#1


用FindFirstFile、FindNextFile函数。

#2


在CFileDialog 中选择多个文件并将所有文件名加入CListBox中 

CFileDialog Filedlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,"Word document(*.doc)|*.doc|All Files(*.*)|*.*||"); //declare a CFileDialog object

CString filename;    //The selected filename
int num=Filedlg.m_ofn.nFileOffset; //The first name's offset to the dir's
                                   //beginning
CString dir=Filedlg.m_ofn.lpstrFile;   // The directory path of the files
char *file=Filedlg.m_ofn.lpstrFile;      //As up.
int length =dir.GetLength(); // The length of the directory path
int total=num; //The copy of the num;
while(file[total]!=NULL && file[total+1]!=NULL)
{
    while(file[total]!=NULL) //get the next filename position,just before the 
                             //next filename.
    total++;
    for(int i=length+1;i<total;i++)
       filename=filename+file[i]; //the next filename is here now
    
    length=total;              
    if(filename!="")
      m_cList.AddString(dir+'\\'+filename); //Add the filename to the list.The  

      //m_cList is a CListBox object,and it is a variableof the dialog box
    else 
      m_cList.AddString(dir);  // If you only select one filename, the 
                              //dir will include the full file pathname.
      filename=_T(""); //To be ready for the next filename
      total++; //The total point move forward to the next name's beginning
} //The lpstrFile structure is like this : "c:\temp a.wma b.wma c.wma ... "

参考一下吧

#3


谢谢回答,可惜我还是比较愚笨。
我有一个对话框,其中的一个列表框需要在程序启动时,
列出当前目录下的所有以.doc为后缀名的文件名。
joknan(西风漂流)大哥说的是通过文件打开框来加入,但是我需要的是程序初始化就搞定。
Nilaix(刀锋)大哥说的FindFirstFile,不知道能否针对只有后缀名的文件,我回头再查查。
大伙儿瞧瞧吧!

#4


OnInitDialog() :

         CFileFind finder;
         CString strPath;//路径
         CString strFile;// 文件名
BOOL bWorking = finder.FindFile(strPath + "*.doc");
while (bWorking)
         {
bWorking = finder.FindNextFile();
strFile = finder.GetFileName();
......
}

#5


同意yucxtry, 用CFileFind类。
也可以直接用Win32 API如FindFirstFile,FindNextFile
等。
msdn中有使用CFileFind类的例子。

#6


懂了.

#7


谢了!

#8


不错!

#1


用FindFirstFile、FindNextFile函数。

#2


在CFileDialog 中选择多个文件并将所有文件名加入CListBox中 

CFileDialog Filedlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,"Word document(*.doc)|*.doc|All Files(*.*)|*.*||"); //declare a CFileDialog object

CString filename;    //The selected filename
int num=Filedlg.m_ofn.nFileOffset; //The first name's offset to the dir's
                                   //beginning
CString dir=Filedlg.m_ofn.lpstrFile;   // The directory path of the files
char *file=Filedlg.m_ofn.lpstrFile;      //As up.
int length =dir.GetLength(); // The length of the directory path
int total=num; //The copy of the num;
while(file[total]!=NULL && file[total+1]!=NULL)
{
    while(file[total]!=NULL) //get the next filename position,just before the 
                             //next filename.
    total++;
    for(int i=length+1;i<total;i++)
       filename=filename+file[i]; //the next filename is here now
    
    length=total;              
    if(filename!="")
      m_cList.AddString(dir+'\\'+filename); //Add the filename to the list.The  

      //m_cList is a CListBox object,and it is a variableof the dialog box
    else 
      m_cList.AddString(dir);  // If you only select one filename, the 
                              //dir will include the full file pathname.
      filename=_T(""); //To be ready for the next filename
      total++; //The total point move forward to the next name's beginning
} //The lpstrFile structure is like this : "c:\temp a.wma b.wma c.wma ... "

参考一下吧

#3


谢谢回答,可惜我还是比较愚笨。
我有一个对话框,其中的一个列表框需要在程序启动时,
列出当前目录下的所有以.doc为后缀名的文件名。
joknan(西风漂流)大哥说的是通过文件打开框来加入,但是我需要的是程序初始化就搞定。
Nilaix(刀锋)大哥说的FindFirstFile,不知道能否针对只有后缀名的文件,我回头再查查。
大伙儿瞧瞧吧!

#4


OnInitDialog() :

         CFileFind finder;
         CString strPath;//路径
         CString strFile;// 文件名
BOOL bWorking = finder.FindFile(strPath + "*.doc");
while (bWorking)
         {
bWorking = finder.FindNextFile();
strFile = finder.GetFileName();
......
}

#5


同意yucxtry, 用CFileFind类。
也可以直接用Win32 API如FindFirstFile,FindNextFile
等。
msdn中有使用CFileFind类的例子。

#6


懂了.

#7


谢了!

#8


不错!