C++日本語名を含むディレクトリ上のファイル起動
VS2015上のC++でコーディングしています。
起動したいbatファイルまでの絶対パスに日本語名が含まれている時に、
system()又は_wsystem()で起動しようとするとstringの変数又はstringの変数を
wstringに変換して渡しているのですが、文字化けしてしまっていてうまく起動できません。
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <algorithm>
#include <filesystem>
#include <Windows.h>
#include <string>
#include <codecvt>
#include <cstdio>
#define BatName "Do.bat"
using namespace std;
wstring _bacePath;
void convert_DobatPath( wstring filePath ){
string fullPath;
wstring wFullPath;
//batパス作成
fullPath = "\\";
fullPath += BatName;
//string→wstring変換
wchar_t *wcs = new wchar_t[fullPath.length() + 1];
mbstowcs( wcs, fullPath.c_str(), fullPath.length() + 1 );
wFullPath = wcs;
delete[] wcs;
//フルパス作成
wFullPath = _bacePath + filePath + wFullPath;
// 起動
_wsystem( wFullPath.c_str() );
}
int main(){
namespace sys = std::tr2::sys;
string startFolder;
cin >> startFolder;
wchar_t *wcs = new wchar_t[startFolder.length() + 1];
mbstowcs( wcs, startFolder.c_str(), startFolder.length() + 1 );
_bacePath = wcs;
sys::path p( startFolder.c_str() );
std::for_each( sys::recursive_directory_iterator( p ), sys::recursive_directory_iterator(),
[]( const sys::path& p ) {
// 特定ファイル見つかったら
// そこまでのパスを取得し、bat起動に投げる
if( sys::is_regular_file( p ) ) {
if( p.filename() == "hoge.txt" ){
sys::path& parentPath = p.parent_path();
convert_DobatPath( parentPath.generic_wstring() );
}
}
} );
}
wstringに変換せずsystem()で呼んでも文字化けしてしまい、同じ結果でした。
wstringで統一しようとしましたが"\"とBatNameを合わせることが出来ませんでした。
C++でbatファイルを起動できないでしょうか。よろしくお願いいたします。