JavaRush /Курсы /C# SELF /Понятие файла, файловой системы и пути

Понятие файла, файловой системы и пути

C# SELF
35 уровень , 0 лекция
Открыта

1. Введение

Файл — это просто блок данных, который физически хранится на каком-то накопителе: жестком диске, SSD, флешке, да хоть на дискете (передайте привет вашему дедушке!). В представлении пользователя файл — это что-то, что можно открыть, прочесть, изменить и сохранить.

В программировании файл — это последовательность байтов с некоторым именем и расположением, а для вас, как для программиста, — это объект, у которого есть имя, путь к нему (как адрес), размер, дата создания и так далее. Самое главное: файл — это персистентное (устойчивое) хранилище данных. Всё, что произошло в памяти после запуска программы, обычно пропадает при её завершении, а файл — останется.

Что такое файловая система?

Файловая система — это способ хранения и организации файлов на диске. Она отвечает на вопросы: где и как искать файл, кто имеет к нему доступ, как именно устроены папки (директории), как находить имя файла и его содержимое.

Представьте огромный шкаф, в котором много ящиков. В каждом ящике могут быть папки, а в каждой папке — документы (файлы). Чтобы найти свой конспект по C#, вы должны открыть шкаф, найти нужный ящик, достать папку и в ней — искомый листочек. Вот так файловая система организует информацию.

Популярные файловые системы

  • NTFS — "родная" файловая система Windows.
  • FAT32, exFAT — для флешек, SD-карт, внешних накопителей.
  • EXT4 — популярна в Linux.
  • APFS, HFS+ — macOS.

Для программиста C# это обычно не существенно: .NET скрывает детали реализации, а вы работаете с абстракцией "файл/папка". Но иногда кое-что знать полезно. Например, в NTFS разрешено в имени файла использовать пробелы и многие спецсимволы, а в FAT32 — нет.

2. Как устроены директории (папки)

Директория (или папка) — это специальный тип файла, который содержит списки других файлов и/или директорий. Дерево директорий (файловая иерархия) — это тот самый привычный путь от корня к файлу: например, C:\Users\Иван\Documents\MyFile.txt.

  • Корень — это самое начало диска (C:\).
  • Внутри — папки (подпапки), в которых лежат файлы или другие папки.

Вот простая визуализация:


C:\
 └── Users\
     └── Иван\
         ├── Documents\
         │    └── MyFile.txt
         └── Pictures\
              └── Cat.jpg

3. Что такое путь к файлу (file path)?

Путь к файлу — это "адрес" файла в дереве каталогов. С его помощью можно однозначно найти нужный файл или папку.

Абсолютный и относительный путь

  • Абсолютный путь: начинается с корня файловой системы.
    Windows: C:\Users\Иван\Documents\MyFile.txt
    Linux/macOS: /home/ivan/Documents/MyFile.txt
  • Относительный путь: начинается с текущего расположения (текущей директории).
    Например, если ваша программа запустилась из папки C:\Users\Иван, то относительный путь Documents\MyFile.txt приведет к тому же файлу.

Текущая директория — это особое понятие: это "точка отсчета" для всех относительных путей. При запуске программы обычно это папка, где лежит .exe-файл, или та, где вы открыли консоль.

Схема: Абсолютный и относительный путь


Абсолютный путь                                Относительный путь

C:\Projects\MyApp\logs\output.txt              logs\output.txt
└─ Корень диска (C:)                           └─ Относительно запущенной MyApp

Разделители в путях: \ и /

В Windows используется обратный слэш (\), а в Linux/macOS — обычно прямой (/).

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

4. Как программа видит файл

В .NET для работы с файлами есть широкий набор инструментов. Основные из них:

  • System.IO.File: статические методы для быстрого чтения, записи, удаления, проверки наличия файлов и др.
  • System.IO.Directory: аналогичные методы для работы с папками.
  • System.IO.FileInfo и System.IO.DirectoryInfo: объектные оболочки с доступом к метаданным файла/папки.
  • System.IO.Path: класс-помощник для работы с путями (соединение путей, выделение расширения, имя и прочее).

Немного примеров

Проверка наличия файла


using System.IO;

if (File.Exists("data.txt"))
{
    Console.WriteLine("Файл найден!");
}
else
{
    Console.WriteLine("Файл не найден!");
}

Получение размера файла


var info = new FileInfo("data.txt");
Console.WriteLine($"Размер файла: {info.Length} байт");

Работу всех примеров мы разберём в ближайших лекциях. Сейчас — просто смотрите и любуйтесь:).

5. Полезные нюансы

Метаданные файла: имя, расширение, размер, даты и т.д.

Когда вы работаете с файлом, интересует не только его содержимое — есть еще "паспорт файла":

  • Имя — то, как файл называется для человека.
  • Расширение.txt, .jpg, .exe, .cs и др.: помогает (иногда!) понять, что внутри.
  • Размер — количество байтов.
  • Время создания/изменения — можно узнать, когда файл появился или последний раз менялся.
  • Атрибуты — например: файл только для чтения, скрытый, системный.

В .NET для работы с этим удобны классы FileInfo, DirectoryInfo (будет в одной из следующих лекций).

Расширения файла и форматы

Расширение файла — это всего лишь часть имени, идущая после точки. Например, у document.txt расширение txt. Операционная система использует расширение, чтобы понять, чем "открывать" файл (например, .jpg — программа, работающая с картинками, .xls — Excel и т.д).

Но для программиста расширение — это всего лишь подсказка. Реальный формат файла определяется только его содержимым. Можно, например, открыть файл MyCat.jpg как текстовый — и увидеть кучу "кракозябр" (какие-то непонятные символы, но никак не картинку). Поэтому всегда стоит помнить: расширение — это не гарантия, а лишь условность.

Как устроено чтение и запись файла: базовые понятия

Файл — это последовательность байтов. Работа с файлом в C# обычно подразумевает:

  • Открытие файла для чтения или записи (или и того, и другого).
  • Чтение данных в память.
  • Запись новых данных на диск.
  • Закрытие файла — очень важно, иначе вы захватите системный ресурс (а кто-то не сможет этот файл удалить, пока вы его держите открытым).

Современные API в .NET заботятся о вас: например, класс File умеет открывать файл, читать и тут же закрывать. Но при работе с потоками (Stream) и большими файлами к этому надо относиться серьезно (об этом поговорим на следующих лекциях).

Что важно знать о кроссплатформенности

Почти весь современный C# работает под Windows, Linux и macOS практически одинаково. Но всё-таки есть нюансы. Самый распространённый — это различие в разделителях (\ vs /), а также ограничения по длине имени файла и запрещённые символы.

Вот почему API типа Path.Combine и методы из System.IO.Path — ваши лучшие друзья. Они "склеят" путь правильно на любой ОС. Никогда не пишите так:


var filePath = "C:\\Users\\Ivan\\data.txt"; // Только для Windows!

Лучше:


var filePath = Path.Combine("Users", "Ivan", "data.txt");

Как узнать текущую рабочую директорию?

Иногда важно понять, где именно будут сохранены ваши файлы. Для этого есть специальный класс:


string currentDir = Environment.CurrentDirectory;
Console.WriteLine($"Текущая директория: {currentDir}");

Кстати, если дать пользователю возможность выбирать путь, используйте диалоги выбора файла/директории или аргументы командной строки.

2
Задача
C# SELF, 35 уровень, 0 лекция
Недоступна
Получение информации о файле
Получение информации о файле
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ra Уровень 1 Student
31 декабря 2025
Файлы тут имхо абсолютно не в тему, лучше бы закончили Core. Аннотации, делегаты, события. А потом только файлы, сериализация, многопоток. Чтобы можно было уже пробовать .Net Core
Yurii N Уровень 66
21 января 2026
Согласен. При том что на это выделили более десятка уровней. Мне это не нужно, придется быстро пролистать к более важным темам )