Boost logo

Boost :

From: Takeshi Mouri (takeshi.mouri.net_at_[hidden])
Date: 2006-03-01 10:31:35


Hi Beman,

> > I tested directory_iterator and fstream for Chinese file names
> > on Windows XP Japanese edition.
> > directory_iterator worked correctly, but fstream didn't.
>
> Thanks Takeshi. I'll give your patch a try tomorrow.
>
> Do you have a test case you would like to see added to the regression test?

Woops! I had forgotten to write the test case.
I tested this by VC7.1 and VC8.

#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/test/unit_test.hpp>
#include <locale>

// Japanese Hello
const wchar_t hello_jp[] = L"\u3053\u3093\u306B\u3061\u306F.txt";
// Chinese Hello
const wchar_t hello_cn[] = L"\u4F60\u597D.txt";

namespace fs = boost::filesystem;
namespace ut = boost::unit_test;

void test_unicode_path_fstream_aux(const fs::wpath& ph)
{
    fs::remove(ph);

    // open and write 3 bytes
    fs::ofstream os(ph);
    os << "abc" << std::flush;
    os.close();

    // check by "true" Unicode function
    BOOST_CHECK_EQUAL(fs::file_size(ph), 3);

    fs::remove(ph);
}

void test_unicode_path_fstream()
{
    // Dinkumware's fstream requires this for non-ASCII filename
    std::locale::global(std::locale(""));

    test_unicode_path_fstream_aux(fs::wpath(hello_jp));
    test_unicode_path_fstream_aux(fs::wpath(hello_cn));
}

ut::test_suite* init_unit_test_suite(int, char* [])
{
    ut::test_suite* test = BOOST_TEST_SUITE("test wpath fstream");
    test->add(BOOST_TEST_CASE(&test_unicode_path_fstream));
    return test;
}

Regards,
Takeshi Mouri


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk