荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: cay (忧郁的年头), 信区: Program
标  题: 怎样在目录中寻找文件
发信站: 荔园晨风BBS站 (Sun Dec 16 11:55:32 2001), 转信

下面的代码说明了怎样在一个给定的目录中从上到下地搜索整个目录树.本例子只
将结果输出到system debug screen.

调用下面的类函数,搜索完成之后,将出现一个信息框.

        void CTestView::OnSearch()
        {

        // szFilename is declared in the header as array of char
        // look for MyFile.txt (or whatever)

                strcpy(szFilename,"MyFile.txt");

        // go to root directory (or to whichever directory that you wish)

                _chdir("C:\\");

        // search for the filename

                SearchDirectory();

        // announce when done

                MessageBox("Done Searching");
        }

函数 SearchDirectory() 在函数 OnSearch()中被调用. SearchDirectory() 然后
反复回调,直到整个目录,包括子目录都被搜索.

        void CTestView::SearchDirectory()
        {
                struct _finddata_t filestruct;
                long hnd;
                char buffer[_MAX_PATH];

        // set _findfirst to find everthing

                hnd = _findfirst("*",&filestruct);

        // if handle fails, drive is empty...

                if((hnd == -1)) return;

        // get first entity on drive - check if it's a directory

                if(::GetFileAttributes(filestruct.name) &
FILE_ATTRIBUTE_DIRECTORY
                        && !(::GetFileAttributes(filestruct.name) &
FILE_ATTRIBUTE_HIDDEN)) {


        // if so, change to that directory and recursively call
SearchDirectory

                        if(*filestruct.name != '.') {

                                _chdir(filestruct.name);

                                SearchDirectory();

        // go back up one directory level

                                _chdir("..");
                        }
                }
                else {

        // if it's not a directory and it matches what you want...

                        if(!stricmp(filestruct.name,szFilename)) {

        // output the filename with path to debugger

                                _getcwd(buffer,_MAX_PATH);
                                strcat(buffer,"\\");
                                strcat(buffer,filestruct.name);
                                strcat(buffer,"\r\n");
                                OutputDebugString(buffer);
                        }
                }

                while(!(_findnext(hnd,&filestruct))) {

                        if(::GetFileAttributes(filestruct.name) &
FILE_ATTRIBUTE_DIRECTORY
                                && !(::GetFileAttributes(filestruct.name) &
FILE_ATTRIBUTE_HIDDEN)) {

                                if(*filestruct.name != '.') {
                                        _chdir(filestruct.name);

                                        SearchDirectory();

                                        _chdir("..");
                                }
                        }
                        else {

                                if(!stricmp(filestruct.name,szFilename)) {
                                        _getcwd(buffer,_MAX_PATH);
                                        strcat(buffer,"\\");
                                        strcat(buffer,filestruct.name);
                                        strcat(buffer,"\r\n");
                                        OutputDebugString(buffer);
                                }
                        }
                }

                _findclose(hnd);
        }


--

        放弃是最容易的事

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.168]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店