
windowsで任意のフォルダにあるファイル名のリストを取得する方法を教えて頂きました。
※例えば*.ecdのファイルリストを取得する場合です。
これを作成された日付が古い順に取得する事は出来ますでしょうか
#include <windows.h>
#include <stdio.h>
int main() {
WIN32_FIND_DATA ffd;
HANDLE h = FindFirstFile("d:\\work\\*.ecd", &ffd);
if ( h != INVALID_HANDLE_VALUE ) {
do {
puts(ffd.cFileName);
} while ( FindNextFile(h, &ffd) );
FindClose(h);
}
}
No.4ベストアンサー
- 回答日時:
× strcpy(*ecoFileList, iter->second);
○ strcpy(*ecoFileList, iter->second.c_str());
No.3
- 回答日時:
> ただこちらの環境だとエラーが出ました。
。> 間違い等ありましたら教えて下さい。
そちらの環境がいかなるものかわからんので教えようがない。
どこでどんなエラーがでたのかわからんので教えようがない。
この回答への補足
すみません、一応考えてみましたが、文字列のコピーでエラーになります。
error C2664: 'strcpy' : 2 番目の引数を 'std::string' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
との事です。
これで解決出来るのですが、おわかりですか?
charにコピー出来るなら何を使用しても構わないのですが(strcpyを使用しています)
int DML_Backup::searchEcoDataFileName(char (*ecoFileList)[32])
{
map_type files;
WIN32_FIND_DATA find_data;
HANDLE handle = FindFirstFile("*.ecd", &find_data);
if ( handle != INVALID_HANDLE_VALUE) {
do {
files.insert(map_type::value_type(
find_data.ftLastWriteTime, find_data.cFileName));
} while ( FindNextFile( handle, &find_data) );
FindClose(handle);
}
char string[32];
for ( map_type::iterator iter = files.begin();
iter != files.end(); ++iter ) {
strcpy(*ecoFileList, iter->second);
ecoFileList++;
}
}
No.2
- 回答日時:
> 出来ましたらどなたかソートの方法を教えてください
C++で書いてみた。 Cはメンドクセーので勘弁して。
#include <windows.h> // FindFirstFile,FindNextFile, etc.
#include <utility> // pair
#include <map> // multimap
#include <string> // string
#include <iostream> // cout, endl
#include <iomanip> // setfill, setw
using namespace std;
bool operator<(const FILETIME& x, const FILETIME& y) {
if ( x.dwHighDateTime < y.dwHighDateTime ) return true;
if ( y.dwHighDateTime < x.dwHighDateTime ) return false;
return x.dwLowDateTime < y.dwLowDateTime;
}
int main() {
multimap<FILETIME,string> files;
WIN32_FIND_DATA ffd;
HANDLE h = FindFirstFile("d:\\work\\*.cpp", &ffd);
if ( h != INVALID_HANDLE_VALUE ) {
do {
files.insert(make_pair(ffd.ftCreationTime, ffd.cFileName));
} while ( FindNextFile(h, &ffd) );
FindClose(h);
}
for ( auto iter = files.begin(); iter != files.end(); ++iter ) {
SYSTEMTIME t;
FileTimeToSystemTime(&iter->first,&t);
cout << setfill('0');
cout << setw(4) << t.wYear << '/'
<< setw(2) << t.wMonth << '/'
<< setw(2) << t.wDay << ' '
<< setw(2) << t.wHour << ':'
<< setw(2) << t.wMinute << ':'
<< setw(2) << t.wSecond << '.'
<< t.wMilliseconds << '\t'
<< iter->second
<< endl;
}
}
No.1
- 回答日時:
できますとも。
WIN32_FIND_DATA構造体の中に作成された日時が格納されています。
それをキーにソートすればいい。
参考URL:http://msdn.microsoft.com/en-us/library/aa365740 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
OpenCVでRAW画像(カラー)を開...
-
VC++で文字列から任意の文字を...
-
EOFにならない?
-
gccでコンパイル時のエラー
-
vc++の使い方について
-
boost::regexで、日本語に利用...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
DLLでダイアログ
-
なぜ、C++の標準ヘッダをインク...
-
snprintfが使用できない。
-
winpcapを用いたプログラミング
-
C++で、テキストファイルを一行...
-
CStringとString
-
標準の例外の全種類と、発生す...
-
#define中の#のエスケープ
-
string型の固定長文字列を配列...
-
VxWorks 6.4ソケット接続につい...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VxWorks 6.4ソケット接続につい...
-
gccでコンパイル時のエラー
-
iostream インクルード時に発生...
-
#include "fstream.h"
-
【C++】ヘッダ内でstringを格納...
-
#defineの使い方について
-
構文エラーが出ているのですが...
-
C言語のポインターで詰まっている
-
std::map の const 修飾について
-
C++での <iostream.h>と<iostre...
-
enumの値から定義名を文字列化...
-
MingwでC++のソースがコンパイ...
-
違い
-
VC++で
-
C++で日本語の処理がしたいです
-
継承されたABのクラスのポイン...
-
C++でShowCursorを使いたい。
おすすめ情報