3

コードに問題があります。私のfindfile関数は実際の名前を表示しませんが、フォルダー名を表示します。何が問題を引き起こしているのか誰かが知っていますか?pathはユーザーのダウンロードフォルダーになり、path1はファイルを移動する必要がある場所です。はい、そのディレクトリにファイルがあります。

コード(Windows用):

bool* pointer = &doen;

WORD wait = 2500;

string path1 = getCurrentPath();

char userName[10];
DWORD userNameSize = sizeof(userName);
GetUserName(userName, &userNameSize);

string path = path1.substr(0, 3);

path += "users\\";
path += userName;
path1 = path;
path += "\\downloads";
path1 += "\\documents\\xxxx";

char const* plaatsD = path.c_str();
char const* plaatsF = path1.c_str();

userNameSize = NULL;

WIN32_FIND_DATA ffd;
TCHAR szDir[MAX_PATH];
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError=0;

string str;
string str2;
string str3;

char const* a;
char const* b;

StringCchCopy(szDir, MAX_PATH, plaatsD);

while (herhalen)
{
    Sleep(wait);

    hFind = FindFirstFile(szDir, &ffd);

    if (INVALID_HANDLE_VALUE == hFind) 
        continue;

    do
    {
        str = ffd.cFileName;

        if (str.find("xxx") != string::npos)
        {
            str2 = path;
            str2 += "\\" + str + ".b";
            str3 = path1;
            str3 += "\\" + str + ".b";

            a = str2.c_str();
            b = str3.c_str();

            try
            {
                CopyFile(a, b, true);
            }
            catch (exception)
            { 
            }

            a = NULL;
            b = NULL;
        }
    } 
    while (FindNextFile(hFind, &ffd) != 0);
}
4

1 に答える 1

2

ダウンロード フォルダー内のすべてのファイルとフォルダーを列挙するには、ディレクトリ パス ( ) にアスタリスク ( *) (詳細については MSDN FindFirstFileを参照)を追加する必要があります。szDirファイルを列挙するだけの場合は、 を追加します*.*

したがって、コードを次のように変更します。

...

path += "users\\";
path += userName;
path += "\\*";      // Append an asterik.

...

コメント セクションで @MRAB が指摘したように、 への呼び出しで検索ハンドルも閉じる必要がありますFindClose(hFile)

于 2012-07-04T18:55:04.343 に答える