私は、ポータブルファイルシステムスキャナを作成し、特定のディレクトリパス上のすべてのファイルを再帰的にリストすることができます。これを行うにはCygwinを使用したC++再帰ファイル/ディレクトリスキャン
、私はdirent.hを利用して、私のコンパイラのためのcygwinを使用しようとすると、テンプレートを使用しています:
#include <dirent.h>
#include <stdio.h>
int main(void)
{
DIR *d;
struct dirent *dir;
d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
// Stuff
}
closedir(d);
}
return(0);
}
しかし、同様の検索再帰的なディレクトリを追加する必要があります。これを行うには、私の解決策は、次のファイルでopendir()を試し、エラーコードがディレクトリとして正常に開かれたかどうかを判断することです(再帰します)。ディレクトリ 'と呼ばれ、ファイルとして表示されます。
私はそれが非常にklugeyだと認めますが、数時間の検索の後でさえも、移植性(win32ではなく)を保持できる優れた方法を見つけることができませんでした。
だから私の簡素化ソリューション(簡略化のためにいくつかの擬似)はこのような何かを探しています:
int scan(string startdir) { DIR *d; struct dirent *dir; d = opendir(startdir.cstr()); if (d) { while ((dir = readdir(d)) != NULL) { if(NOT '.' AND NOT '..') { if(temp = opendir(startdir + d) == NULL) { //FILE OR ERROR }else{ //Opened successfully as a directory, so recurse scan(startdir + d->d_name + "\\"); } } } closedir(d); } return(0); }
私は非常によものの(これは、それをシンプルに保つためにちょうど半分の書き換え擬似コードであるが、動作するようですこれを行うための良い方法についての提案に公開しています)。
私が気付いている主な問題は、特定のリンクファイル 'c:\ cygwin \ dev \ fd'です。このファイルはディレクトリとして開き、無限に繰り返し再帰的に開きます。
'fd'ファイルは4KB、拡張子なしの106バイトで、Windowsのどこにも指していないショートカットです。
このエラーは、いずれかのこのkludgey方法が盗聴されることを示していると思われる、または私がコンパイルしてるCygwinの実装に問題があります簡単な例として
:。
Error Reading: c:\cygwin\dev\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\0 No such file or directory
ものを除きます。ディレクトリは、検索がうまくいくようです。しかし、私はスキャナに除外を厳密にコーディングすることで大丈夫ではない。
誰かがこの問題のアイデア、提案、解決策、または代替方法を持っている場合は、あなたの意見をいただければ幸いです。
ありがとうございました。
おそらくいいアイデアですが、私は高等教育機関からのさらなる議論と承認が必要な他の図書館(無料のものも)を使用することを躊躇しています。私はそれをさらに調べてみよう(私はこれも他の場所でも言及しているのを見てきたように)、おそらくピッチを作るだろう。フィードバックをお寄せいただきありがとうございます – KevenK