

C++プログラムでディレクトリを作成するためにboost::filesystemライブラリを使用しようとしています。以下が実際のコードです：

[code]

    boost::filesystem::path dir(path);
    if (!boost::filesystem::exists(dir)) {
        boost::filesystem::create_directory(dir);
    }
    
[/code]

**エラーメッセージ:**

[code]

    boost::filesystem::create_directory: Illegal byte sequence [system:92]: "@��l"
    
[/code]

このエラーの原因がよくわかりません。使っているパスが正しいことは確認しました、M1
Macでプログラムを実行しています。何が問題で、どうすれば解決できるのでしょうか？

パスを短いものに変えてみましたがダメで、boost::filesystem::path::codecvt()でパスを変換してみましたが、こちらもダメでした。またboostへのリンクも確認しました


CC BY-SA 4.0
2023-03-23T08:59:36.870
94285
2023-03-24T23:23:52.043
2023-03-23T10:48:48.097
3060
57643
question
c++ boost encoding
"Boost filesystem create_directory() throws illegal byte sequence error even with correct file path encoding"


「boost::filesystem::exists」も同じ理由で失敗するに違いない。

ここで「boost::filesystem::create_directory」が「mkdir()」を呼び出していることがわかります:  
<https://www.boost.org/doc/libs/1_81_0/libs/filesystem/src/operations.cpp>

また、「boost::filesystem::path」は「char」サイズの魔法です:  
<https://www.boost.org/doc/libs/1_81_0/boost/filesystem/path.hpp>

次のコードを試していただけますか?

[code]

    #include <sys/stat.h> // https://pubs.opengroup.org/onlinepubs/009695299/functions/mkdir.html
    #include <iostream>
    
    // [...]
    
    boost::filesystem::path dir(path);
    if (mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO)) std::cout << "Fail" << std::endl;
    else std::cout << "OK" << std::endl;
    
[/code]

このコードも失敗する場合は、これを試してください:

[code]

    #include <sys/stat.h> // https://pubs.opengroup.org/onlinepubs/009695299/functions/mkdir.html
    #include <iostream>
    
    // [...]
    
    if (mkdir("./results", S_IRWXU | S_IRWXG | S_IRWXO)) std::cout << "Fail" << std::endl;
    else std::cout << "OK" << std::endl;
    
[/code]

これは解決策ではありません。質問には十分な情報がありません。  
これはあなたの分析を助けるためです。


CC BY-SA 4.0
2023-03-24T23:13:54.000
94302
2023-03-24T23:23:52.043
2023-03-24T23:23:52.043
54819
54819
94285
answer