Использование Visual Studio 2012 & со свойствами проекта:
Я использую ofstream со следующим фрагментом кода:
Примечание: путь «C: \ data» действителен для этого примера
ofstream fexp;
fexp.open("c:\data\test.txt", ios::out|ios::binary|ios::app);
fexp << "writing some text to file with append in binary" << endl;
fexp.flush();
fexp.close();
Если файл отсутствует в каталоге, файл будет открыт, текст будет записан и т. Д. Если файл уже существовал, файл не открывается, не записывается и т. Д. Не возникло никаких исключений и не был найден код ошибки (в errno ). При отладке внутреннего метода open () я обнаружил некоторое внутреннее открытие
звонки пытались скопировать строку имени файла в тип wchar_t и закрылись с внутренней ошибкой 13 (поиск констант MS = Open Aborted).
MBCS устарела, поэтому я не хочу устанавливать это. Единственный другой вариант — это Unicode, который нарушает половину моих изменений. Почему я не могу использовать библиотеку std io ?? !!!
Что еще страннее, у меня была некоторая часть этой работы со вторым переключателем на нет с 1-м набором MBCS. Несмотря на то, что код работал во многих местах, связанных с графическими интерфейсами, такими как CEdit, у меня было много лишнего кода для преобразования из CString в строку, если бы мне пришлось. Если в сущности представление CString представляет собой const char *, что несколько близко к LPCTSTR (не совсем). Это «ДОЛЖЕН«быть несколько»ПРОСТО«конвертировать из CString в строку. Это не потому, что ненужный осложнения переключений между UTF-8 и UTF-16, которыми я не занимаюсь. Я хочу, чтобы мой символ был СТРОГО 1 БАЙТ.
Какой самый близкий путь через это безумие? Должен ли я вернуться обратно к MBCS (хотя и устарел) и изменить все методы контейнера с
GetWindowText () для GetWindowTextA () например или отказаться от использования потоков в Visual Studio, или что ???
Пожалуйста, посоветуйте, если можете … Любая помощь будет принята с благодарностью. Благодарю.
Бешеный пес
ps: Пожалуйста, не беспокойтесь, чтобы превратить меня в полную среду Wide в моем коде, когда мой продукт не будет продаваться в Азии или Аравии.
pps: последнее замечание, которое я получил, потому что я заметил, что моя первоначальная установка Visual Studio 2012 по умолчанию установлена на MBCS.
Как уже отмечали другие, ваша проблема вызвана побегом \
,
"c:\data\test.txt"
Должно быть
"c:\\data\\test.txt"
Вы можете узнать больше о escape-последовательностях Вот.
Чтобы избежать путаницы, вы можете использовать /
вместо \
в ваших файловых путях.
"C:/data/test.txt"
Тем, кто все еще следит за этим, через два с половиной дня я понял, что происходит. Извините за задержку в публикации этого. На самом деле, я полностью забыл об этом.
Это был случай разрешения доступа к родительскому каталогу. Не просто регулярное отрицание. Я имею в виду особый отказ в открытии файла, чтобы добавить к нему (открыть с добавлением). Обычно вы даже не видите эти настройки, если не перейдете в расширенный режим на вкладке безопасности окна свойств файла или каталогов. Даже тогда вы должны сделать пару дополнительных шагов. Поэтому в каталоге над каталогом, в котором находился мой файл, был установлен этот параметр (по какой-то невероятной причине). Тем не менее, я
проверил все три метода работы сейчас (fopen()
, CFile.open()
, stream.open()
).
Спасибо за все идеи, я многому научился, чего раньше не знал. Некоторые идеи были великолепны.
Бешеный пес