В этой статье будет рассмотрено, как вы можете создать, открыть файл, прочитать его содержимое и записать в него в Rust.

Как инженер-программист или кто-то, кто интересуется технологиями, операции чтения и записи (также известные как ввод-вывод для ввода и вывода) являются некоторыми важными понятиями, которые вы должны знать.

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

Но сначала давайте заложим важную основу, рассмотрев, как персонажи представлены в Rust.

String и str (отрезки строки)

Я знаю, что это название (☝🏿) кажется немного запутанным… в Rust у нас есть два типа для представления строк:

  • str: срез строки, единственный строковый тип основного языка программирования Rust. Этот тип статичен и неизменен, и мы обычно видим его в заимствованной форме: &str.
  • String: это второй строковый тип, доступный в Rust благодаря стандартной библиотеке. Этот тип более гибкий, так как им можно владеть и он может изменяться.

Оба типа строк имеют кодировку UTF-8 (подробнее об этом здесь); String используется, когда вам нужно владеть строкой или изменить ее, а &str — когда вы хотите визуализировать строку.

Стандартная библиотека Rust позволяет нам выполнять разнообразные операции с файлами благодаря потрясающей структуре File и связанным с ней методам. Мы собираемся использовать его в оставшейся части этой статьи.

Теперь у нас все готово, так что давайте сразу к делу!!



Как вы создаете файл?

Чтобы создать файл, мы будем использовать create, метод структуры File, как показано в следующем примере:

Метод create возвращает Result , так как мы можем успешно создать файл или у нас может быть ошибка (диск весь, нет привилегий и т. д., выберите свой яд 💀).

Result — это перечисление, также предоставляемое стандартной библиотекой Rust, позволяющее нам управлять ошибками (подробнее здесь).

Как открыть файл?

Чтобы открыть файл, мы собираемся использовать метод open структуры File, который также возвращает Result.

Здесь open попытается найти файл на корневом уровне нашего проекта Rust. Если файл не существует, он будет создан.

Я рекомендую вам запустить наш последний пример с существующим и несуществующим файлом, чтобы увидеть результаты.

Как вы читаете содержимое файла?

Простой способ прочитать содержимое файла — открыть его и прочитать его содержимое как String (теперь вы понимаете, почему в этом первом разделе мы представили строковые типы).

Как видите, мы создаем изменяемую переменную String с именем contents и обновляем ее, передавая содержимое файла в строке 7 с помощью метода read_to_string(). Я рекомендую вам проверить метод read , который позволяет получить содержимое файла в виде вектора байтов (подробнее об этом здесь).

Я предпочитаю читать содержимое файла, используя структуру BufReader<R>, так как она более эффективна и оптимальна. Фокус в том, что Bufreader обеспечивает компонент буферизации при чтении из файла (подробнее об этом здесь).

Как видите, мы начали наш пример с открытия файла, как мы узнали ранее. Затем в строке 6 мы создаем переменную reader; BufReader в файле, который мы только что открыли. Затем мы будем использовать этот reader для извлечения содержимого файла (строка 8).

Как добавить содержимое в файл?

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

То, что несколько секунд назад казалось тривиальным, теперь кажется более сложным… добро пожаловать (назад) в красоту разработки программного обеспечения.

Итак, давайте начнем с первых двух случаев; В следующем примере показано, как добавить содержимое во вновь созданный файл или открыть существующий и переопределить его содержимое.

В нашем примере, если файл missy.txt не существует, мы создадим его перед добавлением нашего контента. Если файл существует, наш новый контент заменит его содержимое.

Да, мы снова используем create. create позволяют нам создавать файлы и открывать существующие в режиме только для записи.

Использование create для существующих файлов действительно работает, но если мы хотим быть более точными, мы должны использовать structOpenOptions, чтобы определить, как осуществляется доступ к файлу.

В этом примере мы открываем существующий файл и в начале добавляем некоторый контент. Если в файле есть какой-то контент, наш новый контент будет добавлен в начале, заменив только необходимое количество данных (здесь будьте осторожны; мы устанавливаем для параметра append значение false в строке 9).

В последнем примере ниже мы добавим некоторый контент в файл, добавив его в конец любых существующих данных. См. здесь параметр append для true в строке 9.

Как и процесс записи, в Rust есть структура BufWriter, которая обеспечивает оптимальный способ записи в поток.

Заключить

Я надеюсь, что смог дать вам прочную основу для выполнения некоторых файловых операций ввода-вывода в Rust. Это только начало. Я рекомендую вам изучить документацию по структуре File, а затем углубиться в BufReader и BufWriter.

Ресурсы