Мне удалось решить мою проблему. Моя проблема была в другой части моего приложения. По сути, я полагал, что MessageManager не был сериализован, потому что я не мог получить данные, которые я ожидал получить от него. Оказывается, проблема была в методе, который возвращал данные: я использовал ссылку на объект, чтобы определить, какие данные вернуть. Конечно, десериализация создает новые экземпляры, поэтому после воссоздания моих объектов я больше не смог получить доступ к данным, идентифицированным старым экземпляром.
Чтобы исправить мою проблему, я использовал другой способ идентификации данных: строковое свойство, значение которого было бы одинаковым для всех экземпляров до и после десериализации.
Спасибо всем, кто посмотрел на мой вопрос и / или попытался ответить на него.
Я не знаю ни о каком портативном способе использовать unicode файлы с помощью системных библиотек по умолчанию. Но существуют некоторые платформы, которые обеспечивают портативные функции, например:
Я - вполне уверенная.NET / моно платформы также содержат портативные функции файловой системы, но я не знаю их.
Я почти уверен, что на Linux, строка имени файла является строкой UTF-8 (в файловой системе EXT3, например, единственные запрещенные символы являются наклонной чертой и ПУСТЫМ УКАЗАТЕЛЕМ), сохраненный в нормальном char *
. Страница справочника, кажется, не упоминает кодировку символов, которая является тем, что приводит меня полагать, что это - системный стандарт UTF-8. OS X, вероятно, использует то же, так как это прибывает из подобных корней, но я менее уверен в этом.
Вам, вероятно, придется установить локаль потока на локаль системного значения по умолчанию. Посмотрите здесь для возможной причины для Ваших проблем: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100887
Mac OS X использует Unicode в качестве своей собственной кодировки символов. Основные строковые объекты являются CFString и NSString. Они хранят массив символов как Unicode.
Функции как fopen или ofstream:: открытое взятие имя файла как символ *, но это интерпретируется как являющийся на странице системного кода.
Это означает, что это может быть японский символ, представленный как Shift JIS (cp932), или Упрощенный китайский язык (Большой 5/cp936), корейский, арабский, русский язык, Вы называете его (как долго, поскольку это соответствует странице системного кода ОС).
Это также означает, что это может использовать японские имена файлов в японской системе только. Измените страницу системного кода, и приложение "прекращает работать", я подозреваю, что это - то, что происходит здесь (никакие большие изменения в Windows начиная с Победы 2000 в этой области).
Это - то, как Вы изменяете страницу системного кода: http://www.mihai-nita.net/article.php?artID=20050611a
В конечном счете Вы могли бы рассмотреть перемещение в Unicode (и использование _wfopen, wofstream).