'\0'で連結する簡単な方法

ファイルをごみ箱に送るには SHFileOperation() を使うのだが、こいつはファイルを一度に複数処理できるようになっていて、そのためパスの指定方法が特殊で、 \0 でパスを連結し最後を \0\0 で終端するという面妖なやりかたをしなくてはならない。

でだ。この \0 で連結されたパスを作るのに簡単な方法はないかと前から思っていたのだが、STL の std::basic_string を使うと簡単にできるんじゃないかと思いついた。

#define UNICODE

#include <windows.h>
#include <string>

void foo() {
    using namespace std;

    // ファイル1
    PWSTR s = L"c:\\abc\\def";
    wstring from;
    from.append(s, lstrlen(s) + 1);

    // ファイル2
    s = L"C:\\ghi\\jkl";
    from.append(s, lstrlen(s) + 1);

    // 最後に \0 を追加
    from.append(L"", 1);
    
    SHFILEOPSTRUCT op = {
        NULL,FO_DELETE, from.c_str(), NULL,
        FOF_NOCONFIRMATION | FOF_ALLOWUNDO | FOF_NOERRORUI};
    SHFileOperation(&op);
}

append する文字数を指定するところが肝だ。

ちなみに、VC++のデバッガで見る限りはうまく動いているようだが、はたして規格的にこれでいいのか、C++に疎い小生では判定しかねる。