4

C:\、D:\ などのドライブに存在する可能性のあるファイルを検索しGetLogicalDriveStringsたいnull。出力プロンプト。これが私のコードです:

#include "StdAfx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>

// Buffer length
DWORD mydrives = 100;
// Buffer for drive string storage
char lpBuffer[100];
const char *extFile = "text.ext";

// You may want to try the wmain() version
int main(void)
{
    DWORD test;
    int i;
    test = GetLogicalDriveStrings(mydrives, (LPWSTR)lpBuffer);
    if(test != 0)
    {
        printf("GetLogicalDriveStrings() return value: %d, Error (if any): %d \n", test, GetLastError());
        printf("The logical drives of this machine are:\n");
        // Check up to 100 drives...
        for(i = 0; i<100; i++)
        printf("%c%s", lpBuffer[i],extFile);
        printf("\n");
    }
    else
        printf("GetLogicalDriveStrings() is failed lor!!! Error code: %d\n", GetLastError());
    _getch();
    return 0;
}

C:\text.ext D:\text.ext ...むしろ私は得ているだけなので、上記の出力が必要ですtext.ext。私は使っているMicrosoft Visual C++ 2010 Express

4

4 に答える 4

9

GetLogicalDriveStrings()null で終わる文字列の二重 null で終わるリストを返します。たとえば、マシンにドライブ A、B、および C があるとします。返される文字列は次のようになります。

A:\<nul>B:\<nul>C:\<nul><nul>

次のコードを使用して、返されたバッファー内の文字列を反復処理し、それぞれを順番に出力できます。

DWORD dwSize = MAX_PATH;
char szLogicalDrives[MAX_PATH] = {0};
DWORD dwResult = GetLogicalDriveStrings(dwSize,szLogicalDrives);

if (dwResult > 0 && dwResult <= MAX_PATH)
{
    char* szSingleDrive = szLogicalDrives;
    while(*szSingleDrive)
    {
        printf("Drive: %s\n", szSingleDrive);

        // get the next drive
        szSingleDrive += strlen(szSingleDrive) + 1;
    }
}

関数がどのように機能するかの詳細は、私が恥知らずにコピーして貼り付けたサンプル コードを含め、docs を読むことで見つけることができることに注意してください。

于 2013-09-02T12:23:21.957 に答える
0
DWORD dwSize = MAX_PATH;
WCHAR szLogicalDrives[MAX_PATH] = { 0 };
DWORD dwResult = GetLogicalDriveStrings(dwSize, szLogicalDrives);

CStringArray m_Drives;
m_Drives.RemoveAll();

if (dwResult > 0 && dwResult <= MAX_PATH)
{
    WCHAR* szSingleDrive = szLogicalDrives;
    while (*szSingleDrive)
    {
        UINT nDriveType = GetDriveType(szSingleDrive);
        m_Drives.Add(CString(szSingleDrive, 2));

        // get the next drive
        szSingleDrive += wcslen(szSingleDrive) + 1;
    }
}
return m_Drives;
于 2015-08-01T21:15:46.177 に答える