Различные способы открытия файла в C ++ в Windows? - PullRequest
4 голосов
/ 11 сентября 2011

При использовании fopen или fstream необходимо указать двоичный режим для предотвращения преобразования символов.В UNIX-подобных системах это обычно не требуется, но в Windows это необходимо.

Это заставляет меня задаться вопросом, является ли это все еще "естественным" способом доступа к данным файловой системы в этой операционной системе.В UNIX предусмотрена архитектура «все в файле», так есть ли какие-нибудь окна, эквивалентные устройству более низкого уровня для доступа к данным?В конце концов, если происходит преобразование символов, возникает необходимость в проверке каждого символа на предмет необходимости его преобразования.Надеюсь, что открытие файла в двоичном режиме просто отключит любую такую ​​обработку, но у меня есть сомнения.

Может кто-нибудь пролить свет на это?

Ответы [ 3 ]

2 голосов
/ 11 сентября 2011

Вы можете просто использовать дескрипторы файлов Windows. CreateFile , ReadFile и WriteFile .

Это очень похоже на способ ведения дел в Unix.Многое можно сделать с помощью этих функций.Не умом, но это так близко, как вы получите!

1 голос
/ 11 сентября 2011

библиотеки времени выполнения C делают то же, что и библиотеки времени выполнения C.

В действительности Windows * имеет большинство вещей как файл (или, я должен сказать, объекты) имя файла вWindows на самом деле является объектом в глобальном пространстве имен \??\.Если вы посмотрите документацию для CreateFile на MSDN , это намного больше, особенно если вы изучите документацию по ядру Windows .

Если выЕсли вам интересны объекты в Windows, вы также можете загрузить и запустить WinObj из technet .

В зависимости от типа проекта, над которым вы работаете, я бы добавил слой абстракции вокругIO только для того, чтобы полностью использовать то, что есть в Windows, но не в библиотеках времени выполнения C.Я редко пишу код для разных платформ, не проходя через собственный API на каждой платформе (или через некоторую промежуточную абстракцию).

1 голос
/ 11 сентября 2011

Да, есть функции, специфичные для Win32.Пуристы скажут, что это делает ваш код непереносимым.И это делает!Но кого это волнует, вы пишете программу для Windows.

OpenFile , CreateFile , и т. Д. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...