C++でファイル検索のプログラムを組んでいるのですが、上手く動作してくれません。
FindFirstFileとNextFileの再帰を使っているのですが、全く動作しません。
開発環境はVisualStudio2017です。
[code]
#include<Windows.h>
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
string current = "C:\\Users\\";
char szDirectoryName[MAX_PATH];
int FindFile(string current);
int main() {
FindFile(current);
return 0;
}
int FindFile(string current) {
ofstream ofs("FileName.txt",ios::app);
WIN32_FIND_DATA date;
HANDLE handle = FindFirstFile(current.c_str(), &date);
if (handle == INVALID_HANDLE_VALUE)cout << "ファイルなし(FindFirstFile)\n" << endl;
else {
for (;;) {
if ((strcmp(date.cFileName, ".") != 0) && (strcmp(date.cFileName, "..") != 0)) {
if (date.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
GetCurrentDirectory(sizeof(szDirectoryName) / sizeof(szDirectoryName[0]), szDirectoryName);
cout << "(DirectryName)" << szDirectoryName << endl;
current = current + "\\" + date.cFileName;
cout << "(current)" << current << endl;
FindFile(current);
}
else {
cout << "(FileName)" << date.cFileName << endl;
ofs << date.cFileName << endl;
}
}
if (!FindNextFile(handle, &date)) {
if (GetLastError() == ERROR_NO_MORE_FILES) {
cout << "ファイルなし(FindNextFile)\n" << endl;
break;
}
break;
}
}
}
FindClose(handle);
ofs.close();
return 0;
}
[/code]
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
[code][/code]はこっちですかね~
https://dixq.net/forum/viewtopic.php?f=3&t=20450 …
あとは…teratailか知恵袋辺りにも投げる予定でしょうか?
LogonUser()APIで投げてましたし。
>あと break も実は 1個でいいよね.
>if (!FindNextFile(handle, &date)) {
> if (GetLastError() == ERROR_NO_MORE_FILES) {
> cout << "ファイルなし(FindNextFile)\n" << endl;
> break;
> }
> break;
>}
ここは1つでいいですよね。
まぁ、最適化されるでしょうけど。
No.3
- 回答日時:
本題とは全く関係ないんだけど, 「date」ってなんだろ. なんの日付?
あと break も実は 1個でいいよね.
スタックサイズが気になる人は std::stack を使うとよい.
No.2
- 回答日時:
ofsの件はよろしくやって貰うとして……
>HANDLE handle = FindFirstFile(current.c_str(), &date);
ではディレクトリ名(正確には違うが…)の指定だけなので…
string path = current + "*.*";
HANDLE handle = FindFirstFile(path.c_str(), &date);
と変更。
>current = current + "\\" + date.cFileName;
で、再帰から帰ってきた時に破壊される為、2番目以降のディレクトリ名が変になるので削除。
>cout << "(current)" << current << endl;
上記の削除を行ったので、
cout << "(current)" << current + date.cFileName << endl;
に変更。
その後の
>FindFile(current);
も
FindFile(current + date.cFileName + "\\");
に変更。
辺りでとりあえず動作しましたかね。
# 再帰が深いのとファイル/ディレクトリが多かったので途中で止めちゃいましたけどね。
# ディレクトリが深い場合はスタックサイズ拡大しないと死ぬかも知れませんので、そこはよろしく処理してくださいな。(再帰とはそういうモノです)
No.1
- 回答日時:
[code][/code]には対応していませんけどね。
ここは。
# ってことでどっかとのマルチなんでしょうなぁ…
ofstream ofs("FileName.txt",ios::app);
はオープンしたまま、再帰で再度オープンしようとしますが、多重の書き込みオープンは可能なんですかね?
FindFirstFile()って、ディレクトリ名だけ渡した場合にそのディレクトリに含まれるファイル一覧取得できましたっけ?
そのディレクトリ自体の情報だけ取得して、他のエントリまでFindNextFile()で検索しないような?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
フルパスから最後のディレクト...
-
ExcelVBAでカレントディレクト...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
VBAでサブフォルダ内の写真サイ...
-
VBAで自身のファイル名を取得す...
-
VBでフォルダ単位のFTP
-
「UNCパスはサポートされません...
-
Ubuntu テキストファイルをどこ...
-
VBA 探しているFileがないとき...
-
FindFirstFileについて
-
ファイルやディレクトリの存在...
-
圧縮(Zip)について
-
C#でカレントディレクトリの取...
-
セルに入力されたパスでフォル...
-
webアプリケーションでの画像フ...
-
ソフトウェアからオープンされ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
どんなプログラムを書いても指...
-
ExcelVBAでカレントディレクト...
-
マイクラでPythonのプログラミ...
-
windows.hがincludeされない
-
「UNCパスはサポートされません...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ExcelVBA サーバーの(共有フォ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
webアプリケーションでの画像フ...
-
ファイルダイアログのカレント...
-
VBAで自身のファイル名を取得す...
-
AfxLoadLibrary関数で、DLLのハ...
-
Ubuntu テキストファイルをどこ...
おすすめ情報