免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
bd-C++ 快速獲取文件夾(目錄)下的所有文件名(VS2013測試通過)

說起使用C++操作文件,最常見的是當(dāng)屬對(duì)單一文件進(jìn)行讀寫了,但有時(shí)我們需要一個(gè)目錄下的所有文件又該怎么快速獲取呢?

這個(gè)問題的難點(diǎn)在于如何查找文件目錄下的文件及其數(shù)量,以及如何遞歸查找目錄下的子目錄的文件及其數(shù)量。

我一下子就懵了,趕緊打開搜索引擎,在互聯(lián)網(wǎng)上找了一圈,發(fā)現(xiàn)核心代碼幾乎都是同一段(原作者已不可考究):

#include <iostream>
#include <string>
#include <vector>
//注意這個(gè)頭文件
#include <io.h>
using namespace std;

//核心函數(shù)
void getFileNames(string path, vector<string>& files);

int main(){
	vector<string> fileNames;
	string path("D:\\test"); 	//自己選擇目錄測試
	getFileNames(path, fileNames);
	for (const auto &ph : fileNames) {
		std::cout << ph << "\n";
	}
	return 0;
} 
//核心代碼
void getFileNames(string path, vector<string>& files)
{
	//文件句柄
	//注意:我發(fā)現(xiàn)有些文章代碼此處是long類型,實(shí)測運(yùn)行中會(huì)報(bào)錯(cuò)訪問異常
	intptr_t hFile = 0;
	//文件信息
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			//如果是目錄,遞歸查找
			//如果不是,把文件絕對(duì)路徑存入vector中
			if ((fileinfo.attrib & _A_SUBDIR))
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
					getFileNames(p.assign(path).append("\\").append(fileinfo.name), files);
			}
			else
			{
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
			}
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}

筆者在Visual Studio 2017中測試結(jié)果如下:
輸入路徑:D:\\test(或者D:/test),文件分布為如圖:

輸出結(jié)果:


所以上述代碼應(yīng)該是正確無誤的。


想必你也注意到了 #include <io.h> 這條語句,看起來不太像C/C++標(biāo)準(zhǔn)庫(C++標(biāo)準(zhǔn)庫一般沒有.h,在C++使用C標(biāo)準(zhǔn)庫一般是cxxx,例如cstdio),而且getFilesNames里面用了大量該文件中的。在VS中打開該文件,有一些簡單的注釋(不知所云):

// io.h
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// This file declares the low-level I/O and file handling functionality.

但是這里使用**#include <io.h>** 而不是**#include “io.h”** 說明 io.h 這個(gè)頭文件在編譯器的默認(rèn)搜索路徑,而不在當(dāng)前項(xiàng)目路徑。據(jù)查, 關(guān)于這個(gè)io.h的信息很少,但可以肯定的是它并不是標(biāo)準(zhǔn)C/C++語言的頭文件,我用everythig搜索了該名字,發(fā)現(xiàn)在我電腦上以下路徑: D:\Windows Kits\10\Include\10.0.17763.0\ucrt\io.h.

  • ucrt:就是Universal C Runtime 庫,即,通用C運(yùn)行時(shí)庫,包含眾多C的頭文件。

  • ucrt目前已經(jīng)成為Windows組之一,從Windows 10開始作為操作系統(tǒng)的一部分提供。對(duì)應(yīng)的lib庫為libucrt.lib,對(duì)應(yīng)的dll庫為ucrtbase.dll

所以 io.h 應(yīng)該是個(gè)VC運(yùn)行時(shí)(runtime)庫,使用它可能在跨平臺(tái)(unix/linux)上會(huì)有問題,謹(jǐn)慎使用。


目前也沒找到更好的讀取某一目錄下的文件信息的方式,如果有知道的小伙伴可以在評(píng)論區(qū)賜教哦~


原創(chuàng)文章,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明本文鏈接:https://blog.csdn.net/Love_Point/article/details/109209154注意百度和各類采集站皆不可信,搜索時(shí)請謹(jǐn)慎甄別。同時(shí)由于文章一般都有時(shí)效性,本人可能會(huì)不定期對(duì)自己的博文進(jìn)行修正和更新,因此敬請?jiān)L問出處以查看最新版本。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++獲取目錄下的文件列表
C#操作目錄和文件
C# 使用原生 System.IO.Compression 實(shí)現(xiàn) zip 的壓縮與解壓
C#文件操作
C++下遍歷文件夾
更有效的文件下載功能
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服