Использовать предварительно отформатированный HTML-код
echo '<pre>';
var_dump($data);
echo '</pre>';
Это как работает Win32 API. Под капотом функция open
Python вызывает функцию CreateFile
, и если это не удается, она преобразует код ошибки Windows в Python IOError
.
r+
открытый режим соответствует dwAccessMode
в GENERIC_READ|GENERIC_WRITE
и dwCreationDisposition
в OPEN_EXISTING
. Режим открытия w
соответствует dwAccessMode
в GENERIC_WRITE
и dwCreationDisposition
в CREATE_ALWAYS
.
Если вы внимательно прочитали замечания в документации CreateFile
, в нем говорится следующее:
Если заданы
blockquote>CREATE_ALWAYS
иFILE_ATTRIBUTE_NORMAL
,CreateFile
завершается с ошибкой и устанавливает последнюю ошибку наERROR_ACCESS_DENIED
, если файл существует и имеет атрибутFILE_ATTRIBUTE_HIDDEN
илиFILE_ATTRIBUTE_SYSTEM
. Чтобы избежать ошибки, укажите те же атрибуты, что и существующий файл.Итак, если вы вызывали
CreateFile
непосредственно из C-кода, решением было бы добавитьFILE_ATTRIBUTE_HIDDEN
кdwFlagsAndAttributes
(вместоFILE_ATTRIBUTE_NORMAL
). Однако, поскольку в API-интерфейсе Python нет возможности сказать, что он пройдет в этом флаге, вам просто придется обойти его, либо используя другой открытый режим, либо сделав файл не скрытым.
Вот подробные отличия: -
`` r '' Откройте текстовый файл для чтения. Поток расположен в начале файла.
`` r + '' Открыт для чтения и записи. Поток расположен в начале файла.
`` w '' Усекать файл до нулевой длины или создать текстовый файл для записи. Поток расположен в начале файла.
`` w + '' Открыт для чтения и записи. Файл создается, если он не существует, в противном случае он усекается. Поток расположен в начале файла.
`` a '' Открыт для записи. Файл создается, если он не существует. Поток расположен в конце файла. Последующая запись в файл всегда будет заканчиваться в текущем конце файла независимо от любого промежуточного fseek (3) или подобного.
`` a + '' Открыт для чтения и записи. Файл создается, если он не существует. Поток расположен в конце файла. Последующая запись в файл всегда будет заканчиваться в текущем конце файла независимо от любого промежуточного fseek (3) или подобного.
blockquote>Из документации python - http: //docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files:-
В Windows добавлен «b», добавленный в режим файл в двоичном режиме, поэтому существуют также такие режимы, как «rb», «wb» и «r + b». Python в Windows делает различие между текстовыми и двоичными файлами; конечные символы в текстовых файлах автоматически изменяются, когда данные считываются или записываются. Эта за кадром модификация файловых данных отлично подходит для текстовых файлов ASCII, но это приведет к повреждению двоичных данных, подобных этим в файлах JPEG или EXE. Будьте очень осторожны, чтобы использовать двоичный режим при чтении и записи таких файлов. В Unix не помешает добавить «b» в этот режим, поэтому вы можете использовать его независимо от платформы для всех двоичных файлов.
blockquote>Итак, если вы используете
w
режиме, вы на самом деле пытаетесь создать файл, и у вас могут не быть разрешения на его выполнение.r+
является подходящим выбором.Если вы находитесь в ситуации, когда вы еще не знаете, где ваш
.picasi.ini
существует или нет, и у вашего пользователя Windows есть разрешения на создание файлов в этом каталоге, и вы хотите добавьте новую информацию вместо начала в начале файла (ака «append»), тогдаa+
будет подходящим выбором.Это не имеет никакого отношения к тому, скрыт ли ваш файл или нет.