これは、私が特別に出てくると共有する、ディレクトリを横断する小さなプログラムを書いたものです。
//複数のヘッダファイルが必要
書式#include <WINDOWS.H>
書式#include <stdio.hに>
書式#include <stdlib.h>に含ま
書式#include <iostreamの>
/ **
*特徴:深さを実現トラバースディレクトリとファイル
*パラメータ:CHAR *、それが入ってくるの開始を横断するパスであることを意味します
*戻り値の型:無効
** /
ボイドFindFileAndDirectory(チャー*パス)
{
文字ファイルパス[MAX_PATH] = {0}。
WIN32_FIND_DATA FindData;
FindHandleをHANDLE。
ZeroMemory(&FindData、はsizeof(WIN32_FIND_DATA))。
strcpyの(ファイルパス、パス)。
IF(ファイルパス[strlenを(ファイルパス) - 1] = '\\'!)
{
STRCAT(ファイルパス、 "\\")。
}
STRCAT(ファイルパス、 "*")。
FindHandle = FindFirstFile(ファイルパス、&FindData)。
(FindHandle == INVALID_HANDLE_VALUE)の場合
{
裁判所未満<< "!查找失败、程序退出" <<てendl;
返します。
}
行う
{
IF((FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
&&のstrcmp(FindData.cFileName、 "")
&
{
チャーTEMPPATH [MAX_PATH] = {0}。
strcpyの(TEMPPATH、パス);
IF(TEMPPATH [strlenを(TEMPPATH) - 1] = '\\'!)
{
STRCAT(TEMPPATH、 "\\")。
}
STRCAT(TEMPPATH、FindData.cFileName)。
裁判所未満<< "パスは次のとおりです。" << TEMPPATH <<てendl;
FindFileAndDirectory(TEMPPATH)。
}
そうであれば( ""のstrcmp(FindData.cFileName)&&のstrcmp(FindData.cFileName、 ".."))
{
チャーTEMPPATH [MAX_PATH] = {0}。
strcpyの(TEMPPATH、パス);
TEMPPATH [strlenを(TEMPPATH) - 1] = 0。
STRCAT(TEMPPATH、FindData.cFileName)。
裁判所未満<< "ファイルです:" << TEMPPATH <<てendl;
}
}一方(FindNextFile(FindHandle、&FindData))。
FindClose(FindHandle)。
}
受信ファイルはバックパスには、すべてのフォルダとファイルを横断したとき。私たちは、議論することができます興味を持っています。
これは、Cの新バージョンです++
書式#include <iostreamの>
の#include <io.h>
std名前空間を使用しました。
#define BUF_SIZE 256
ボイドfindfileanddirectory(チャー*パス)
{
FILEDATA _finddata_t。
長いLF;
チャーLPATH [256] = {0}。
strcpyの(LPATH、パス);
IF(!LPATH [STRLEN(LPATH) - 1] = '\\')
{
STRCAT(LPATH、 "\\")。
}
STRCAT(LPATH、 "*。*");
LF = _findfirst(LPATH、&FILEDATA)。
もし(LF == -1)
{
coutの<< "查找文件失败、返回!" <<てendl;
返します。
}
行う
{
((filedata.attrib&_A_SUBDIR)&&のstrcmp(filedata.name)&&のstrcmp(filedata.name、 "..") "")であれば
{
チャーbufpath [BUF_SIZE] = {0}。
strcpyの(bufpath、パス);
もし(bufpath [strlenを(bufpath) - 1]!= '
}
STRCAT(bufpath、filedata.name)。
裁判所未満<< "パスは次のとおりです。" << bufpath <<てendl;
findfileanddirectory(bufpath)。
}
他( ""のstrcmp(filedata.name)&&のstrcmp(filedata.name、 ".."))であれば
{
チャーbufpath [BUF_SIZE] = {0}。
strcpyの(bufpath、パス);
IF(bufpath [strlenを(bufpath) - 1] = '\\'!)
{
STRCAT(bufpath、 "\\")。
}
STRCAT(bufpath、filedata.name)。
裁判所未満<< "パスは次のとおりです。" << bufpath <<てendl;
}
}一方(_findnext(LF、&FILEDATA)== 0)。
_findclose(LF)。
}