2

現在、ディレクトリをスキャンし、そのディレクトリ内の各ファイルのファイル名を取得する必要がある C プロジェクトに取り組んでいます。コードは、Windows と Linux の両方で実行する必要があります。次のコードを使用したLinuxバージョンがあります。

DIR *dp;
int i = 0;
struct dirent *ep;
char logPath[FILE_PATH_BUF_LEN];
sprintf(logPath, "%s/logs/", logRotateConfiguration->logFileDir);
printf("Checking pre existing log count in: %s\n", logPath);
dp = opendir(logPath);

if (dp != NULL)
{
    while ((ep = readdir(dp)) != NULL)
    {
        if (strcmp(ep->d_name, ".") != 0 && strcmp(ep->d_name, "..") != 0)
        {
            i = i + 1;
        }
    }
    closedir(dp);
}
else
{
    perror("Couldn't open directory");
}
logRotateConfiguration->logCount = i;

このコードを機能させるために を使用して#include <dirent.h>いますが、これは Windows と互換性がないことがわかりました。したがって、私のヘッダー ファイルでは、Linux の場合は ifdef を使用して dirent.h をインクルードしましたが、Windows の場合は何を使用できるかわかりません。

ご協力いただきありがとうございます。

4

3 に答える 3

1

Windows でファイルを一覧表示するにはFindFirstFile()、 とを使用できますFindNextFile()。例については、 ディレクトリ内のファイルの一覧表示を参照してください。

于 2012-10-16T11:35:33.250 に答える
1

dirent.h (クリック) の無料の Windows 実装があります。

于 2012-10-16T11:36:43.377 に答える
0

MinGW (リンク) がありdirent.hます。ネット上の dirent の特定の実装に関するドキュメントは見つかりませんでしたが、UNIX 派生バージョンと十分に類似していると思います。ヘッダー ファイルを見て、それを使用するかどうかを決定できます。

他の回答に関するメモ: softagalleria.net のバージョンについては知らないので、それについて話すことはできませんが、FindFirstFile/FindNextFile-API について: 使用する場合は、必ず「Unicode」バージョン (実際には UCS-) を使用してください。 2) Ascii バージョンでは非常に限られたパス長しか許可されないためです。Unicode バージョンを使用するには、マクロを定義し、すべてのパスの先頭に\\?\.

于 2012-10-16T12:02:18.307 に答える