0

WinAPI の CreateFile 関数を使用して単純な TXT を作成する次のコードがあります。

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>

#include <string.h>
#include <tchar.h>
#include <strsafe.h>
#include <iostream>


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

    LPCTSTR lpFileName = L"C:\\MyTest.txt";
    DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
    DWORD dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
    LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL;
    DWORD dwCreationDisposition = CREATE_NEW;
    DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
    HANDLE hTemplateFile = NULL;

    HANDLE C=CreateFile(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes,
        dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);

    DWORD Er=GetLastError();

    char *pMsg = NULL;

    FormatMessageW(
        FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_ALLOCATE_BUFFER,
        NULL,
        Er,
        LANG_SYSTEM_DEFAULT,
        (LPWSTR)&pMsg,
        0,
        NULL
        );

    if (C != INVALID_HANDLE_VALUE)

    {
        MessageBox(NULL, (LPCTSTR)pMsg, L"Explorando la API", MB_ICONINFORMATION);
    }
    else
    {

        MessageBox(NULL, (LPCTSTR)pMsg, L"Explorando la API", MB_ICONINFORMATION);
    }


    CloseHandle(C);

}

StringCchCat問題は、関数を使用してカスタマイズされた文字列を lpFile 名に渡すにはどうすればよいかということです。

(RegQueryValue を使用して) レジストリ キーから任意の番号を読み取り、ファイルに名前を付けたいと思います。たとえば、DemoValue から "1" を読み取った場合、TXT 名は MyText1.txt または MyText(1).txt になります。

手伝って頂けますか?ありがとう!

4

1 に答える 1

1

StringCchCat の代わりに StringCbPrintf を使用することをお勧めします。

int const filenamesize = 30;
TCHAR filename[filenamesize]; 
StringCbPrintf(filename, filenamesize * sizeof(TCHAR), TEXT("Myfile(%d).txt", somevalue);
// e.g: filename contains a "Myfile(1).txt" if 'somevalue' contains 1
...
HANDLE c = CreateFile(filename, ...) ;
于 2013-09-13T13:03:45.540 に答える