opendir и closedir и readdir, отсутствующие в документации MSDN [дубликат]

Мы можем указать режим при открытии файла. В режиме мы указываем, хотим ли мы читать «r», писать «w» или добавлять «a» в файл. Мы также указываем, хотим ли мы открыть файл в текстовом режиме или в двоичном режиме.

По умолчанию используется чтение в текстовом режиме. В этом режиме мы получаем строки при чтении из файла.

  1. С другой стороны, двоичный режим возвращает байты, и это режим, который будет использоваться при работе с нетекстовым файлы, такие как изображения или файлы exe.

Режимы файлов Python Режим и описание

  • 'r' Откройте файл для чтения. (по умолчанию)
  • 'w' Откройте файл для записи. Создает новый файл, если он не существует или обрезает файл, если он существует.
  • 'x' Откройте файл для эксклюзивного создания. Если файл уже существует, операция завершится неудачно.
  • 'a' Открыть для добавления в конце файла без его усечения. Создает новый файл, если он не существует.
  • 't' Открывается в текстовом режиме. (по умолчанию)
  • 'b' Открыть в двоичном режиме.
  • '+' Открыть файл для обновления (чтение и запись)

В Ваш случай добавить текст в файл, открыть файл в режиме «a», здесь кодировка является необязательным аргументом

f = open("test.txt",mode = 'a',encoding = 'utf-8')
#or
f = open("test.txt",mode = 'a+')
#or if binary mode
f = open("test.txt",mode = 'ab+')

Например:

with open("test.txt",'a',encoding = 'utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n") 
3
задан Bjorn Tipling 19 May 2009 в 16:55
поделиться

5 ответов

Я бы предложил использовать FindFirstFile () и FindNextFile () .

Вот пример MSDN , который делает точно, что вы хотите.

14
ответ дан i_am_jorf 20 August 2018 в 23:26
поделиться

Другая, возможно, намного лучшая замена: https://github.com/tronkko/dirent

0
ответ дан Dmitry Mikushin 20 August 2018 в 23:26
поделиться

Если вам нужна быстрая замена при замене, вы также можете использовать:

http://www.two-sdg.demon.co.uk/curbralan/code/dirent/ dirent.html

Простой класс, который я нашел, который использует POSIX API для Win32

7
ответ дан Juntalis 20 August 2018 в 23:26
поделиться
  • 1
    Это НЕ замена для POSIX dirent. Мало того, что структура DIR отсутствует в d_type, но в заголовке отсутствует целая группа определений. Это хорошая отправная точка, но она не может использоваться для чего-либо, что хочет различать файл & amp; каталог! – nevelis 18 June 2013 в 08:08
  • 2
  • 3
    @nevelis POSIX не указывает член d_type, это общее расширение, но не часть POSIX. – Jonathan Wakely 28 February 2018 в 21:45

Ответ на этот вопрос во многом зависит от целевой платформы, которую вы компилируете.

MSVC ++ - это компилятор, поэтому я собираюсь предположить, что вы пытаетесь выполнить аналогичные действия, такие как opendir ( ) и readdir () на платформе Windows. В этом случае рассмотрим следующие ресурсы:

Вторая ссылка - это страница MSDN, в которой перечислены все функции, доступные в API платформы Windows, для взаимодействия с файловой системой. Вы обнаружите, что большинство операций с файлами в Windows начинаются с вызова функции CreateFile .

1
ответ дан Mike Dinescu 20 August 2018 в 23:26
поделиться

Отлично, в конце концов, это было не так сложно, мне пришлось использовать цикл do-while:

HANDLE hFind;
WIN32_FIND_DATA FindFileData;

if((hFind = FindFirstFile("C:/some/folder/*.txt", &FindFileData)) != INVALID_HANDLE_VALUE){
    do{
        printf("%s\n", FindFileData.cFileName);
    }while(FindNextFile(hFind, &FindFileData));
    FindClose(hFind);
}

Это действительно лучше, потому что я могу использовать «* .txt» и т. д., делает это гораздо легче найти некоторые конкретные типы файлов, раньше мне приходилось писать собственную функцию соответствия для этого: D

2
ответ дан user 20 August 2018 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: