C++17ではファイルの存在チェックが様変わりしています。 ファイルの存在チェックはエディタ用のプログラムでは頻出することでしょう。
#include <windows.h> #include <string> #include <vector> #include <fstream> #include <filesystem> #include "HmCppInvoke.h" using namespace Hidemaru; using namespace std; extern "C" __declspec(dllexport) THmNumber test() { Hm.funcDllExport(); try { // 現在編集中のパス filesystem::path openfile = Hm.Edit.getFilePath(); if (filesystem::exists(openfile)) { Hm.OutputPane.output(L"ファイルは存在します\r\n"); } else { Hm.OutputPane.output(L"ファイルは存在しません\r\n"); } filesystem::path test = filesystem::path("C:") / "aaa" / "bbb.txt"; if (filesystem::exists(test)) { wstring filename = test.filename(); Hm.OutputPane.output(filename + L"は存在します\r\n"); } else { wstring filename = test.filename(); Hm.OutputPane.output(filename + L"は存在しません\r\n"); } } catch (exception& e) { // エラー内容をchar → wstring へ auto wide_what = Text::Encoding::cp932_to_utf16( e.what() ); Hm.OutputPane.output(wide_what + L"\r\n"); } return 1; }
// FileCheck.dllとしてコンパイルした #dll = loaddll(currentmacrodirectory + @"\FileCheck.dll"); // 途中でマクロの文法や型の致命的エラーが発生した場合でもdllを解放する。 if (version >= 898) { eval "keepdll #dll, 0"; } #r = dllfuncw(#dll, "test"); freedll(#dll);