激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++編程使用findfirst和findnext查找及遍歷文件實現示例

C++編程使用findfirst和findnext查找及遍歷文件實現示例

2022-01-24 14:07ranjiewen C/C++

這篇文章主要為大家介紹了C++編程如何使用findfirst和findnext查找及遍歷文件實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助

這兩個函數均在io.h里面

一、首先了解一下一個文件結構體:

?
1
2
3
4
5
6
7
8
struct _finddata_t {
    unsigned    attrib;
    time_t      time_create;  
    time_t      time_access;  
    time_t      time_write;
    _fsize_t    size;
    char        name[260];
};

time_t,其實就是long

而_fsize_t,就是unsigned long

現在來解釋一下結構體的數據成員吧。

attrib,就是所查找文件的屬性:

_A_ARCH(存檔)、_A_HIDDEN(隱藏)、_A_NORMAL(正常)、

_A_RDONLY(只讀)、 _A_SUBDIR(文件夾)、_A_SYSTEM(系統)。

time_create、time_access和time_write分別是創建文件的時間、最后一次訪問文件的時間和文件最后被修改的時間。

size:文件大小

name:文件名。

二、用 _findfirst 和 _findnext 查找文件

1、_findfirst函數:long _findfirst(const char *, struct _finddata_t *);

第一個參數為文件名,可以用"*.*"來查找所有文件,也可以用"*.cpp"來查找.cpp文件。第二個參數是_finddata_t結構體指針。若查找成功,返回文件句柄,若失敗,返回-1。

2、_findnext函數:int _findnext(long, struct _finddata_t *);

第一個參數為文件句柄,第二個參數同樣為_finddata_t結構體指針。若查找成功,返回0,失敗返回-1。

3、_findclose()函數:int _findclose(long);

只有一個參數,文件句柄。若關閉成功返回0,失敗返回-1。

?
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
#include <io.h>
#include <iostream>
#include <fstream>
using namespace std;
bool transfer(string fileName, int exeNum );
void dfsFolder(string folderPath, ofstream &fout);
int main()
{
    _finddata_t file;
    int k;
    long HANDLE;
    k = HANDLE = _findfirst("*.*", &file);
    while (k != -1)
    {
        cout << file.name << endl;
        k = _findnext(HANDLE, &file);
    }
    _findclose(HANDLE);
 
    transfer("C:\\Windows\\*.exe", 0);
    ofstream o_fstream;
 
    dfsFolder("E:\\\WHU\\Study", o_fstream);
    return 0;
}
//_findfirst 函數返回的是匹配到文件的句柄,數據類型為long。
//遍歷過程可以指定文件類型,這通過FileName的賦值來實現,例如要遍歷C : \WINDOWS下的所有.exe文件
bool transfer(string fileName , int exeNum)
{
    _finddata_t fileInfo;
    long handle = _findfirst(fileName.c_str(), &fileInfo);
 
    if (handle == -1L)
    {
        cerr << "failed to transfer files" << endl;
        return false;
    }
 
    do
    {
        exeNum++;
        cout << fileInfo.name << endl;
    } while (_findnext(handle, &fileInfo) == 0);
    cout << " .exe files' number:  " << exeNum << endl;
 
    return true;
}
 
//遍歷文件夾及其子文件夾下所有文件。操作系統中文件夾目錄是樹狀結構,使用深度搜索策略遍歷所有文件。用到_A_SUBDIR屬性
//在判斷有無子目錄的if分支中,由于系統在進入一個子目錄時,匹配到的頭兩個文件(夾)是"."(當前目錄),".."(上一層目錄)。
//需要忽略掉這兩種情況。當需要對遍歷到的文件做處理時,在else分支中添加相應的代碼就好
void dfsFolder(string folderPath, ofstream &fout)
{
    _finddata_t FileInfo;
    string strfind = folderPath + "\\*";
    long Handle = _findfirst(strfind.c_str(), &FileInfo);
 
    if (Handle == -1L)
    {
        cerr << "can not match the folder path" << endl;
        exit(-1);
    }
    do{
        //判斷是否有子目錄 
        if (FileInfo.attrib & _A_SUBDIR)
        {
            //這個語句很重要 
            if ((strcmp(FileInfo.name, ".") != 0) && (strcmp(FileInfo.name, "..") != 0))
            {
                string newPath = folderPath + "\\" + FileInfo.name;
                dfsFolder(newPath, fout);
            }
        }
        else
        {
            fout<<folderPath.c_str() << "\\" << FileInfo.name << " ";
            cout << folderPath.c_str() << "\\" << FileInfo.name << endl;
        }
    } while (_findnext(Handle, &FileInfo) == 0);
 
    _findclose(Handle);
    fout.close();
}
//#include <iostream>   
//#include <string>   
//#include <io.h>   
//using namespace std;
//
//int main()
//{
//    _finddata_t file;
//    long longf;
//    string tempName;
//    //_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)   
//    if ((longf = _findfirst("E:\\WHU\\Study\\*.*", &file)) == -1l)
//    {
//        cout << "文件沒有找到!\n";
//        return 0;
//    }
//    do
//    {
//        cout << "文件列表:\n";
//        tempName = file.name;
//        if (tempName[0] == '.')
//            continue;
//        cout << file.name<<endl;
//
//        if (file.attrib == _A_NORMAL)
//        {
//            cout << "  普通文件  ";
//        }
//        else if (file.attrib == _A_RDONLY)
//        {
//            cout << "  只讀文件  ";
//        }
//        else if (file.attrib == _A_HIDDEN)
//        {
//            cout << "  隱藏文件  ";
//        }
//        else if (file.attrib == _A_SYSTEM)
//        {
//            cout << "  系統文件  ";
//        }
//        else if (file.attrib == _A_SUBDIR)
//        {
//            cout << "  子目錄  ";
//        }
//        else
//        {
//            cout << "  存檔文件  ";
//        }
//        cout << endl;
//    } while (_findnext(longf, &file) == 0);//int __cdecl _findnext(long, struct _finddata_t *);如果找到下個文件的名字成功的話就返回0,否則返回-1  
//
//    _findclose(longf);
//
//    return 0;
//}

以上就是C++編程使用findfirst和findnext查找及遍歷文件實現示例的詳細內容,更多關于findfirst和findnext查找及遍歷文件的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/ranjiewen/p/5960976.html

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
主站蜘蛛池模板: 久久久成人精品视频 | 成人精品视频网站 | 日本在线观看视频网站 | 免费在线观看一级片 | 成人aaaa免费全部观看 | 久久成人免费网站 | 久久精品国产99国产精品亚洲 | 偿还电影免费 | 国产精品视频yy9299一区 | 黄色免费影片 | 特级黄色一级毛片 | 亚洲免费永久 | 久草成人在线 | 国产99视频在线观看 | 在线亚洲播放 | 91网站链接 | 国产午夜网| 法国性xxx精品hd专区 | 91久久久久久久久久久久久 | 黄污在线观看 | 国产免费福利视频 | 欧美成人毛片 | 一级空姐毛片 | 久久亚洲精品国产一区 | 欧美视频一区二区三区四区 | 免费国产一区二区视频 | 伊人999| 欧美人人干 | 真人一级毛片免费 | 精品一区二区在线观看 | 国产精品免费麻豆入口 | 欧美日韩在线视频一区 | 久久777国产线看观看精品 | 欧美精品免费一区二区三区 | 精品久久久久久久久久中文字幕 | 久久福利小视频 | 毛片免费观看视频 | 成人免费看毛片 | 欧美成人免费在线视频 | 中文在线免费观看 | 草久免费 |