2012-01-04 7 views
1

指定したディレクトリにいくつのファイルがあるかを確認したいと思います。例えば、私はresourcesと呼ばれる私の.exeの隣にディレクトリを持っていて、そこに何個の.txtファイルがあるのか​​チェックしたいと思います。フォルダ内にいくつのファイルがあるかを確認する方法は?

これはWindowsのC++でどのように行うことができますか?

+0

どのオペレーティングシステムですか? –

+2

100%OS depedent。 Cでプログラミングされたシステムが存在していて、filsystemの種類は存在しないことに気をつけてください。このようなシステムでfopenを呼び出すと、リンカエラーが発生します! –

+2

Windowsとしてタグ付けされているので、FindFirstFile()、FindNextFile()、FindClose()API呼び出しになります。 –

答えて

3

これはオペレーティングシステムによって異なります。 Windowsでは、"*.txt"のような適切なフィルターを使用して、FindFirstFileFindNextFileを使用してディレクトリーの内容を列挙します。完了したらFindCloseに電話してください。

UNIXベースのオペレーティングシステムでは、opendir(3)readdir(3)を使用して、ディレクトリの内容を列挙します。自分でファイル名をフィルタリングする必要があります。完了したらclosedir(3)に電話することを忘れないでください。

6

私はboost :: filesystemを使用します。ほとんどの作業が完了したsample programもあります。

0

このMS Windowsコードは、すべて.txtのファイルをC:にリストしています。他のすべてのファイルを一覧表示するには、strcpy(DirSpec, "c:\\*.txt")strcpy(DirSpec, "c:\\*")に変更します。

#include <stdio.h> 
#include <stdlib.h> 
#define _WIN32_WINNT 0x0501 
#include <windows.h> 
#define BUFSIZE MAX_PATH 

int main(int argc, char *argv[]) 
{ 
    WIN32_FIND_DATA FindFileData; 
    HANDLE hFind = INVALID_HANDLE_VALUE; 
    DWORD dwError; 
    LPSTR DirSpec; 
    unsigned int nFiles=0; 
    DirSpec = (LPSTR) malloc (BUFSIZE); 
    strcpy(DirSpec, "c:\\*.txt"); 

    printf ("Current directory : %s\n\n", DirSpec); 

    hFind = FindFirstFile(DirSpec, &FindFileData); 
    if (hFind == INVALID_HANDLE_VALUE) 
    { 
     printf ("incorrect Handle : %u.\n", GetLastError()); 
     return (-1); 
    } 
    else 
    { 
     printf ("%s\n", FindFileData.cFileName); 


     while (FindNextFile (hFind, &FindFileData) != 0) 
     { 
      nFiles++; 
      printf ("%s\n", FindFileData.cFileName); 
     } 

     dwError = GetLastError(); 
     FindClose(hFind); 

     printf ("\n %d files found.\n\n", nFiles); 

     if (dwError != ERROR_NO_MORE_FILES) 
     { 
      printf ("FindNextFile Error.\n", dwError); 
      return (-1); 
     } 
    } 
    free(DirSpec); 
    return (0); 
} 
関連する問題