アプリ版:「スタンプのみでお礼する」機能のリリースについて

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);
}
}

A 回答 (4件)

× strcpy(*ecoFileList, iter->second);


○ strcpy(*ecoFileList, iter->second.c_str());
    • good
    • 0

> ただこちらの環境だとエラーが出ました。


> 間違い等ありましたら教えて下さい。

そちらの環境がいかなるものかわからんので教えようがない。
どこでどんなエラーがでたのかわからんので教えようがない。

この回答への補足

すみません、一応考えてみましたが、文字列のコピーでエラーになります。

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++;
}
}

補足日時:2011/06/09 23:21
    • good
    • 0

> 出来ましたらどなたかソートの方法を教えてください



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;
}
}

この回答への補足

ありがとうございます。ただこちらの環境だとエラーが出ました。。
間違い等ありましたら教えて下さい。

補足日時:2011/06/09 21:55
    • good
    • 0

できますとも。



WIN32_FIND_DATA構造体の中に作成された日時が格納されています。
それをキーにソートすればいい。

参考URL:http://msdn.microsoft.com/en-us/library/aa365740 …

この回答への補足

ありがとうございます。出来ましたらどなたかソートの方法を教えてください

補足日時:2011/06/07 22:06
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!