C++/CLIで、あるファイルを削除するプログラムを作りたく、以下のような概要のコードを書きました。
C++
1std::string directoryname = "C:\hoge"; 2System::String^ filename = "fuga.txt"; 3std::string path = directoryname + "\" + MarshalString(filename); 4if (std::filesystem::exists(path)) { 5 std::filesystem::remove(path); 6}
C++
1 2std::string MarshalString(System::String^ s) { 3 using namespace System::Runtime::InteropServices; 4 const char* chars = 5 (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); 6 Marshal::FreeHGlobal(System::IntPtr((void*)chars)); 7 return chars; 8}
(MarshalString()
はMicrosoft Docsから持ってきたのを少し改変したものです。)
これをVisualStudioで実行すると、std::filesystem::remove(path)
の部分で
System.Runtime.InteropServices.SEHException: '外部コンポーネントが例外をスローしました。'
とでてしまいます。
一体何が原因か全くわかりません。ファイルもexists()
で確かめている筈なのになぜ例外が発生してしまうのでしょうか。
何故、例外が発生してしまうのでしょうか。また、その解決策はなんでしょうか。
Microsoftの公式を見てもよくわからず、質問するに至りました。
どなたかご教授お願いします。
回答2件
あなたの回答
tips
プレビュー