jsonCPを使用してフォーマットを処理するために、jsonフォーマットを使用して構成データを保管しています。最近の拡張では、いくつかの(Windowsの)ファイルパスを格納するフィールドが必要です。そして、std :: stringの動作は - パスに何か面白いものが含まれていない限り、パスが引用符を取得する場所のように、C:\my_directory\data.dat
は正常に動作しますが、"C:\my directory\data.dat"
が失敗し、対応するキーは"path"=""C:\my directory\data.dat""
になります。jsonjson(JsonCPP)のファイルパスをエスケープする
エスケープは標準的な答えですが、私は自分のエスケープ/エスケープを書くことができますが、私は車輪を作り直すべきではありませんので、標準のシンプルで軽量なアプローチまたは何か同じように重い)? JsonCPPのいくつかの組み込み関数、stdlibを使用するイディオム/スニペット、Windows APIライブラリ呼び出し?
JSONでの保存のためにファイルパスをエスケープする「業界標準」アプローチとは何ですか?
VC++; Visual Studio 2015、Win10、MFC。
編集:コード。もちろん
std::string SignalControlDialog::GetDlgItemStdString(UINT id)
{
TCHAR entry_tchar[1024];
LPTSTR entry_lptstr = entry_tchar;
GetDlgItemText(id, entry_lptstr, 1024);
std::wstring entry_wstring(&entry_tchar[0]);
std::string entry_string(entry_wstring.begin(), entry_wstring.end());
return entry_string;
}
//...
data->project_file = GetDlgItemStdString(IDC_EDIT1);
//...
Json::Value config;
Json::StyledStreamWriter writer;
config["crossingfile"] = data::project_file;
std::ofstream stream;
stream.open(GetFileName().c_str());
if (stream.fail())
return FALSE;
writer.write(stream, config);
stream.close();
私のテストではあなたが引用符を入れた場合、それは自動的に、独自のエスケープ文字を追加しますJsonCPP' '使用。どのようなコードあなたが使ったのですか? – Galik
@Galik:編集を参照してください –
これを行うとどうなるでしょうか?[config ["crossingfile"] = R "(" C:\ my directory \ data.dat ")"; ' – Galik