Имя файла файловой системе windows может иметь длину

Слишком длинное имя файла или слишком длинный целевой путь — как исправить?

При копировании, создании, сохранении или перемещении файлов и папок в Windows 11 и Windows 10 на внутреннем HDD или SSD, при копировании данных на внешний диск или флешку, вы можете столкнуться с ошибками вида «Слишком длинный целевой путь. Имена файлов слишком длинны для помещения в эту целевую папку», «Указано неправильное или слишком длинное имя файла» и другие, имеющие отношение к слишком длинным именам или путям к файлам и папкам.

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

  • Слишком длинное имя файла или слишком длинный целевой путь
    • Причины ошибки и способы её исправить
    • Как включить поддержку длинных путей в Windows
      • В редакторе реестра
      • В редакторе локальной групповой политики
    • Почему ошибка сохраняется при включенной поддержке длинных путей

Причины ошибки «Слишком длинное имя файла» и «Слишком длинный целевой путь» и способы её исправить

Слишком длинный целевой путь при копировании

Несмотря на то, что файловой системой NTFS длина пути ограничена 32760 символов, в Windows существует ограничение на полный путь в 260 символов, включая путь к папке и имя файла с расширением. Ещё одно ограничение — 255 символов на имя файла или отдельной папки. Схожие ограничения есть для файловых систем FAT32 и ExFAT. Когда полный путь к файлу, с которым вы выполняете действия, превышает указанное число символов, вы можете получить сообщение об ошибках о слишком длинном целевом пути или слишком длинном имени файла.

Отсюда основные способы исправить ошибки, связанные с использованием слишком длинного пути:

  1. Использовать более короткие имена файлов и более простое и «компактное» дерево папок.
  2. Включить поддержку длинных путей — такая опция есть в Windows 10 и Windows 11, далее будет рассмотрен порядок действий. Однако, это решит не все проблемы, о чем мы также поговорим.
  3. Использовать файловые менеджеры, которые могут работать с длинными путями по умолчанию: Total Commander, Files (но для него потребуется включить и поддержку длинных путей в системе) или даже 7-Zip File Manager, который прекрасно с этим справляется.

Как включить поддержку длинных путей в Windows 10 и Windows 11

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

В редакторе реестра

Если на вашем компьютере установлена Windows 11 или Windows 10 Домашняя, используйте редактор реестра для включения опции:

  1. Нажмите правой кнопкой мыши по кнопке «Пуск» и выберите пункт «Выполнить» или нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter.
  2. В редакторе реестра перейдите к разделу
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  3. В правой панели редактора реестра дважды нажмите по параметру с именем LongPathsEnabled и присвойте значение 1 вместо 0 для этого параметра.
    Включить поддержку длинных путей в редакторе реестра Windows

  4. Закройте редактор реестра, перезагрузите компьютер.

В редакторе локальной групповой политики

В Windows Pro и Enterprise можно использовать редактор локальной групповой политики:

  1. Нажмите клавиши Win+R на клавиатуре, введите gpedit.msc в диалоговом окне «Выполнить» и нажмите Enter.
  2. Перейдите к разделу Конфигурация компьютера — Административные шаблоны — Система — Файловая система.
  3. Дважды нажмите по параметру «Включить длинные пути Win32».
    Политики файловой системы в gpedit

  4. Установите значение «Включено» для этого параметра, примените настройки.
    Включить поддержку длинных путей в редакторе локальной групповой политики

  5. Закройте редактор локальной групповой политики и перезагрузите компьютер.

Готово, теперь поддержка длинных путей в Windows включена, однако это не означает, что ошибки, с ними связанные, исчезнут.

Почему ошибки длинных путей появляются, несмотря на включенную поддержку длинных путей

Имена файлов слишком длинны для помещения в эту папку

Даже если вы включите поддержку длинных путей к папкам и файлам в Windows 11/10, при действиях с такими файлами в проводнике и некоторых программах вы продолжите получать ошибки вида «Слишком длинный целевой путь. Имена файлов слишком длинны для помещения в эту целевую папку» или «Указано неправильное или слишком длинное имя файла», также будут недоступны некоторые действия в папках, имеющих длинный путь.

Причина этого — поддержка длинных путей требуется не только на уровне системы, но и в самой программе, которая работает с этими путями, в качестве примера:

  • Проводник не сможет полноценно работать с длинными путями даже при включенной поддержке.
  • Файловый менеджер Files из магазина приложений будет исправно работать, если включить поддержку длинных путей, и будет сообщать об ошибках при отключенной поддержке.
    Работа с длинными путями в файловом менеджере Files

  • Total Commander или встроенный файловый менеджер 7-Zip работают с длинными путями независимо от того, включена ли их поддержка в Windows.

То же самое касается не только файловых менеджеров, но и прикладных программ: текстовых, графических и видео редакторов и другого ПО.

Надеюсь, инструкция прояснила причины ошибки и возможные способы решения проблемы. Если же вопросы остаются — жду их в комментариях.

Источник статьи

Автор24
— учеба по твоим правилам

Определение 1

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

В понятие «файловая система» включается:

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

Определение 2

К каждому компьютеру можно подключить сразу несколько устройств внешней памяти. Основное устройство внешней памяти компьютера − это жёсткий диск. Если жёсткие диски имеют достаточно большую ёмкость, то каждый из них можно разделить на несколько логических разделов, что даст некоторое преимущество:

  • есть возможность хранить операционную систему в одном логическом разделе, а данные — в другом, это позволяет переустанавливать операционную систему, не затрагивая данные;
  • в различных логических разделах одного жёсткого диска можно установить разные операционные системы;
  • изменение одних логических разделов не затрагивает другие разделы.

Каждое устройство внешней памяти, которое подключается к компьютеру, а также каждый из логических разделов жёсткого диска получает логическое имя.

В операционной системе Windows принято давать устройствам внешней памяти логические имена, состоящие из одной латинской буквы и знака двоеточия:

«Файловая система» 👇

  • для дисководов гибких дисков (дискет) — $A:$ и $B:$ (в настоящее время на современных компьютерах не используется);
  • для жёсткого диска и его логических разделов — $C:, D:, E:$ и т. д.;
  • для оптического дисковода — имена, которые следуют после имени последнего имеющегося на компьютере жёсткого диска или раздела жёсткого диска по алфавиту (например, $F:$);
  • для флеш-памяти, подключаемой к компьютеру, — имя, которое следует за последним именем оптического дисковода (например, $G:$).

В операционной системе Linux существуют иные правила поименования дисков и их разделов. Например:

  • логические разделы, которые принадлежат первому жёсткому диску, получают имена hda1, hda2 и т. д.;
  • логические разделы, которые принадлежат второму жёсткому диску, получают имена hdb1, hdb2 и т. д.

Имена файлов

При идентификации файлов учитываются ограничения операционной системы (ОС) как на длину имени, так и на используемые символы. Ещё совсем недавно в файловой системе FAT длина имени ограничивалась известной схемой $8.3$ (где собственно имя состоит из $8$ символов, а из $3$ символов состоит его расширение), а в ОС UNIX System $V$ имена не могут содержать более $14$ символов. Но современные файловые системы, как правило, могут поддерживать длинные имена файлов, т.к. при работе с длинными символьными именами можно давать файлам мнемонические названия, по которым даже через достаточно длительный отрезок времени можно будет вспомнить, что содержат эти файлы. Например, Windows в своей файловой системе NTFS устанавливает, что длина имени файла может быть до $255$ символов, не учитывая завершающего нулевого символа, причём в именах разрешается использовать пробелы и буквы национальных алфавитов. Расширение имени файла записывается после точки и содержит обычно $3-4$ символа.

В ОС MS Windows нельзя использовать символы: \, /,:, *, ?, «, , |в имени файла. В Linux эти символы, кроме «/», допустимы, но лучше их не использовать, так как некоторые из них могут иметь специальный, не соответствующий символу смысл, а также могут быть не совместимы с другими ОС.

В отличие от Windows ОС Linux различает строчные и прописные буквы в именах файлов: например, PROBA.txt, proba.txt и PrObA.txt — это три разных файла в Linux.

Типы файлов

Файлы бывают разных типов: обычные, специальные файлы, файлы-каталоги.

Обычный файл может быть как текстовым, так и двоичным. Текстовый файл состоит из строк символов, которые представлены в кодовой таблице. Это может быть документ, исходный текст программы и т.п. Текстовый файл можно прочитать на экране, а можно распечатать на принтере.
Двоичный файл имеет сложную внутреннюю структуру, например, объектного кода программы или архивного файла. Любая операционная система должна уметь распознавать хотя бы один тип файла − свой собственный исполняемый файл.

Определение 3

Специальный файл − это файл, который используется для представления физического устройства ввода-вывода (жёсткого или оптического дисковода, принтера, звуковых колонок и т.д.). Он позволяет пользователю, при помощи обычных команд записи в файл или чтения из файла, выполнять операции ввода-вывода.

Определение 4

Кроме обычных файлов, специальных и файлов-каталогов в ОС Linux есть ещё ссылки — это файлы, содержащие ссылки на другие файлы (не путать с ярлыками).

Определение 5

Каталог − это группа файлов, которые пользователь захотел объединить по своему усмотрению (файлы, которые содержат программы игр, или файлы, которые составляют один программный пакет). В то же время каталог − это файл, и он содержит системную информацию о группе файлов, которые его составляют. В каталоге находится список файлов, вошедших в него, и устанавлено соответствие между файлами и их атрибутами (характеристиками).

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

  • создатель файла,
  • пароль для доступа к файлу,
  • информация о разрешенном доступе,
  • владелец файла,
  • признаки (скрытый файл, файл только для чтения, системный файл, архивный файл, временный файл (который надо удалить после завершения процесса) и т.д.)
  • длина записи,
  • длина ключа,
  • текущий размер файла,
  • время создания, время последнего изменения/последнего доступа,
  • максимальный размер файла.

Так, значения характеристик файлов могут содержаться непосредственно в каталоге, как это было сделано в файловой системе MS-DOS, но каталог может и ссылаться на таблицу, которая содержит эти характеристики, как это реализовано в ОС UNIX (см. Рисунок 1)

Структура каталогов: а - структура записи каталога MS-DOS (32 байта); б - структура записи каталога ОС UNIX

Рисунок 1. Структура каталогов: а — структура записи каталога MS-DOS (32 байта); б — структура записи каталога ОС UNIX

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

Иерархически каталоги могут представлять дерево или сеть. Если файлу разрешено входить только в один каталог, то каталоги образуют дерево, если файл может входить сразу в несколько каталогов, то каталоги образуют сеть. Каталоги в MS-DOS образуют структуру под названием дерево, а в UNIX’е – сетевую структуру. Каталоги имеют символьные имена, как, впрочем, и любые другие файлы, каталог однозначно инициируется составным именем, которое содержит цепочку символьных имен всех каталогов, Через эту цепочку имён и проходит полный путь от корня до данного каталога.

Каталоги жёстких дисков и/или их логических разделов в ОС Linux не являются корневыми каталогами (не принадлежат верхнему уровню файловой системы). Они встраиваются («монтируются») в каталог mnt. Другие устройства внешней памяти (гибкие, оптические и флеш-диски) встраиваются в каталог media. Каталоги mnt и media, в свою очередь, встраиваются в единый корневой каталог, который обозначается знаком « / » (прямой слэш).

Рисунок 2. Логическая организация файловой системы, где а — одноуровневая; б — иерархическая (дерево); в — иерархическая (сеть)

Определение 6

Файловая структура диска — это совокупность всех файлов на дисках и взаимосвязей между ними.

Файловая структура может быть простой и иерархической (многоуровневой).

Простая файловая структура может быть использована для дисков с небольшим (до нескольких десятков) количеством файлов. Тогда оглавление диска представит собой линейную последовательность имён (см. Рисунок 3)

Рисунок 3. Простая файловая структура

Иерархическая файловая структура используется для хранения большого количества файлов (сотни, тысячи). Иерархия — это когда части (элементы) целого располагаются в порядке от высшего к низшим. В начальном (корневом) каталоге содержатся вложенные каталоги и файлы первого уровня. Каждый каталог первого уровня может содержать как вложенные каталоги второго уровня, так и файлы и т. д. (Рисунок 4).

Рисунок 4.

Графическое изображение иерархической файловой структуры носит название дерево. В MS Windows каталоги могут образовать несколько отдельных деревьев, если они расположены на разных дисках; а в Linux все каталоги объединяются в одно дерево, общее для всех дисков (см. Рисунок 5).

Иерархическая файловая структура в ОС Linux

Рисунок 5. Иерархическая файловая структура в ОС Linux

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

Полное имя файла

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

В операционных системах семейства Windows путь к файлу надо указывать, начиная с логического имени дисковода; причём, после имени каждого подкаталога ставится обратный слэш.

В ОС Linux путь к файлу надо указывать, начиная с имени единого корневого каталога; причём, после имени каждого подкаталога, в отличие от ОС MS Windows, ставится прямой слэш.

Путь к файлу и имя файла, записанные последовательно, составят полное имя файла. В системе не может быть двух файлов, которые имели бы одинаковые полные имена.

Пример 1

Пример полного имени файла в ОС Windows: Е:\Фото\реки\Катунь.jpeg
Пример полного имени файла в ОС Linux: /home/phizik/text

Работа с файлами

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

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

  • копирование (когда создаём копию файла в другом каталоге или на другом носителе);
  • перемещение (когда переносим файла на другой носитель или в другой каталог, исходный файл уничтожаем);
  • переименование (когда переименовывается собственно имя файла);
  • удаление (когда объект уничтожается в исходном каталоге).

Если нужно найти файл, имя которого известно приблизительно, удобнее всего использовать маску имени файла. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, которые допускаются в именах файлов, среди них могут встречаться такие символы: «?» (вопросительный знак) — что означает ровно один произвольный символ; символ «*» (звездочка) означает абсолютно любую (в том числе и пустую) последовательность символов произвольной длины.

Пример 2

По маске $m*.txt$ будут найдены все файлы, имена которых начинаются с буквы $«m»$, с расширением $txt$, , в том числе и файл $m.txt$. По маске $m?.*$ будут найдены файлы с любыми возможными расширениями и именами, состоящими из двух букв и начинающимися с буквы $«m»$.
Ещё пример. Надо определить, какое из указанных имен файлов удовлетворяет маске:

\[*56?*9.d?t\]

  1. $5699.dtp$
  2. $151619.dot$
  3. $2256789.dtt$
  4. $11569.dot$

Решение

Рисунок 6.

Все программы и данные хранятся в долговременной 

(внешней) памяти компьютера в виде файлов.

Файл — это определенное количество информации (программа или данные), имеющее имя и хранящееся в долговременной (внешней) памяти.

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

В различных операционных системах существуют различные форматы имен файлов. В операционной системе MS-DOS собственно имя файла должно содержать не более 8 букв латинского алфавита, цифр и некоторых специальных знаков, а расширение состоит из трех латинских букв, например: proba.txt

В операционной системе Windows имя файла может иметь длину до 255 символов, причем можно использовать русский алфавит, например: Единицы измерения информации.doc

Таблица 1.1. Типы файлов и расширений

Тип файла

Расширения
Программы exe, com
Текстовые файлы txt, doc
Графические файлы bmp, gif, jpg и др.
Звуковые файлы wav, mid
Видеофайлы avi
Программы на языках программирования bas, pas и др.

Пример файловой системы:

Файловая система. На каждом носителе информации (гибком, жестком или лазерном диске) может храниться большое количество файлов. Порядок хранения файлов на диске определяется используемой файловой системой.

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

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

Таблица 1.2. Одноуровневый каталог
Имя файла Номер начального сектора
Файл_1 56
Файл_2 89
Файл_112  1200
   

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

Начальный, корневой каталог содержит вложенные каталоги 1-го уровня, в свою очередь, каждый из последних может содержать вложенные каталоги 2-го уровня и так далее. Необходимо отметить, что в каталогах всех уровней могут храниться и файлы.

Например, в корневом каталоге могут находиться два вложенных каталога 1-го уровня (Каталог_1, Каталог_2) и один файл (Файл_1). В свою очередь, в каталоге 1-го уровня (Каталог_1) находятся два вложенных каталога второго уровня (Каталог_1.1 и Каталог_1.2) и один файл (Файл_1.1) — рис. 1.3.

 

Файловая система  это система хранения файлов и организации каталогов.

Рис. 1.3. Иерархическая файловая система
 

Рассмотрим иерархическую файловую систему на конкретном примере. Каждый диск имеет логическое имя (А:, В: — гибкие диски, С:, D:, Е: и так далее — жесткие и лазерные диски).

Пусть в корневом каталоге диска С: имеются два каталога 1-го уровня (GAMES, TEXT), а в каталоге GAMES один каталог 2-го уровня (CHESS). При этом в каталоге TEXT имеется файл proba.txt, а в каталоге CHESS — файл chess.exe (рис. 1.4).

Рис. 1.4. Пример иерархической файловой системы

 

Путь к файлу. Как найти имеющиеся файлы (chess.exe, proba.txt) в данной иерархической файловой системе? Для этого необходимо указать путь к файлу. В путь к файлу входят записываемые через разделитель «\» логическое имя диска и последовательность имен вложенных друг в друга каталогов, в последнем из которых содержится нужный файл. Пути к вышеперечисленным файлам можно записать следующим образом:

C:\GAMES\CHESS\

С:\ТЕХТ\

Путь к файлу вместе с именем файла называют иногда полным именем файла.

Пример полного имени файла:

С \GAMES\CHESS\chess.exe

Представление файловой системы с помощью графического интерфейса. Иерархическая файловая система MS-DOS, содержащая каталоги и файлы, представлена в операционной системе Windows с помощью графического интерфейса в форме иерархической системы папок и документов. Папка в Windows является аналогом каталога MS-DOS

Однако иерархическая структура этих систем несколько различается. В иерархической файловой системе MS-DOS вершиной иерархии объектов является корневой каталог диска, который можно сравнить со стволом дерева, на котором растут ветки (подкаталоги), а на ветках располагаются листья (файлы).

В Windows на вершине иерархии папок находится папка Рабочий стол. Следующий уровень представлен папками Мой компьютер, Корзина и Сетевое окружение (если компьютер подключен к локальной сети) — рис. 1.5.

Рис. 1.5. Иерархическая структура папок

 

Если мы хотим ознакомиться с ресурсами компьютера, необходимо открыть папку Мой компьютер.

Иерархическая система папок Windows

1. В окне Мой компьютер находятся значки имеющихся в компьютере дисков. Активизация (щелчок) значка любого диска выводит в левой части окна информацию о его емкости, занятой и свободной частях.

Просмотр содержимого документа

«Файл. Расширение файла. Действия с файлами»

Литература

  • Современные операционные системы, Э. Таненбаум, 2002, СПб, Питер, 1040 стр., (в djvu 10.1Мбайт) подробнее>>
  • Сетевые операционные системы Н. А. Олифер, В. Г. Олифер (в zip архиве 1.1Мбайт)
  • Сетевые операционные системы Н. А. Олифер, В. Г. Олифер, 2001, СПб, Питер, 544 стр., (в djvu 6.3Мбайт) подробнее>>

2.1 Файлы

Требования к хранению информации:

  • возможность хранения больших объемов данных

  • информация должна сохраняться после прекращения работы процесса

  • несколько процессов должны иметь одновременный доступ к информации

2.1.1 Именование файлов

Длина имени файла зависит от ОС, может быть от 8 (MS-DOS) до 255 (Windows, LINUX) символов.

ОС могут различать прописные и строчные символы. Например, WINDOWS и windows для MS-DOS одно и тоже, но для UNIX это разные файлы.

Во многих ОС имя файла состоит из двух частей, разделенных точкой, например windows.exe. Часть после точки называют расширением файла. По нему система различает тип файла.

У MS-DOS расширение составляет 3 символа. По нему система различает тип файла, а также можно его исполнять или нет.

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

2.1.2 Структура файла

Три основные структуры файлов:

  1. Последовательность байтов — ОС не интересуется содержимым файла, она видит только байты. Основное преимущество такой системы, это гибкость использования. Используются в Windows и UNIX.

  2. Последовательность записей — записей фиксированной длины (например, перфокарта), считываются последовательно. Сейчас не используются.

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

Три типа структур файла.

2.1.3 Типы файлов

Основные типы файлов:

  • Регулярные — содержат информацию пользователя. Используются в Windows и UNIX.

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

  • Символьные — для моделирования ввода-вывода. Используются только в UNIX.

  • Блочные — для моделирования дисков. Используются только в UNIX.

Основные типы регулярных файлов:

  • ASCII файлы — состоят из текстовых строк. Каждая строка завершается возвратом каретки (Windows), символом перевода строки (UNIX) и используются оба варианта (MS-DOS). Поэтому если открыть текстовый файл, написанный в UNIX, в Windows, то все строки сольются в одну большую строку, но под MS-DOS они не сольются (это достаточно частая ситуация). Основные преимущества ASCII файлов:
    — могут отображаться на экране, и выводится на принтер без преобразований
    — могут редактироваться почти любым редактором

  • Двоичные файлы — остальные файлы (не ASCII). Как правило, имеют внутреннею структуру.

Основные типы двоичных файлов:

  • Исполняемые — программы, их может обрабатывать сама операционная система, хотя они записаны в виде последовательности байт.

  • Неисполняемые — все остальные.

Примеры исполняемого и не исполняемого файла

«Магическое число» — идентифицирующее файл как исполняющий.

2.1.4 Доступ к файлам

Основные виды доступа к файлам:

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

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

2.1.5 Атрибуты файла

Основные атрибуты файла:

  • Защита — кто, и каким образом может получить доступ к файлу (пользователи, группы, чтение/запись). Используются в Windows и UNIX.

  • Пароль — пароль к файлу

  • Создатель — кто создал файл

  • Владелец — текущий владелец файла

  • Флаг «только чтение» — 0 — для чтения/записи, 1 — только для чтения. Используются в Windows.

  • Флаг «скрытый» — 0 — виден, 1 — невиден в перечне файлов каталога (по умолчанию). Используются в Windows.

  • Флаг «системный» — 0 — нормальный, 1 — системный. Используются в Windows.

  • Флаг «архивный» — готов или нет для архивации (не путать сжатием). Используются в Windows.

  • Флаг «сжатый» — файл сжимается (подобие zip архивов). Используются в Windows.

  • Флаг «шифрованный» — используется алгоритм шифрования. Если кто-то попытается прочесть файл, не имеющий на это прав, он не сможет его прочесть. Используются в Windows.

  • Флаг ASCII/двоичный — 0 — ASCII, 1 — двоичный

  • Флаг произвольного доступа — 0 — только последовательный, 1 — произвольный доступ

  • Флаг «временный» — 0 — нормальный, 1 — для удаления файла по окончании работы процесса

  • Флаг блокировки — блокировка доступа к файлу. Если он занят для редактирования.

  • Время создания — дата и время создания. Используются UNIX.

  • Время последнего доступа — дата и время последнего доступа

  • Время последнего изменения — дата и время последнего изменения. Используются в Windows и UNIX.

  • Текущий размер — размер файла. Используются в Windows и UNIX.

2.1.6 Операции с файлами

Основные системные вызовы для работы с файлами:

  • Create — создание файла без данных.

  • Delete — удаление файла.

  • Open — открытие файла.

  • Close — закрытие файла.

  • Read — чтение из файла, с текущей позиции файла.

  • Write — запись в файл, в текущею позицию файла.

  • Append — добавление в конец файла.

  • Seek — устанавливает файловый указатель в определенную позицию в файле.

  • Get attributes — получение атрибутов файла.

  • Set attributes — установить атрибутов файла.

  • Rename — переименование файла.

2.1.7 Файлы, отображаемые на адресное пространство памяти

Иногда удобно файл отобразить в памяти (не надо использовать системные вызовы ввода-вывода для работы с файлом), и работать с памятью, а потом записать измененный файл на диск.

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

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

Пример копирования файла через отображение в памяти.

Алгоритм:

  1. Создается сегмент для файла 1

  2. Файл отображается в памяти

  3. Создается сегмент для файла 2

  4. Сегмент 1 копируется в сегмент 2

  5. Сегмент 2 сохраняется на диске

Недостатки этого метода:

  • Тяжело определить длину выходного файла

  • Если один процесс отобразил файл в памяти и изменил его, но файл еще не сохранен, второй процесс откроет это же файл, и будет работать с устаревшим файлом.

  • Файл может оказаться большим, больше сегмента или виртуального пространства.

2.2 Каталоги

2.2.1 Одноуровневые каталоговые системы

В этой системе все файлы содержатся в одном каталоге.

Однокаталоговая система, содержащая четыре файла, файлов А два, но разных владельцев

Преимущества системы:

  • Простота

  • Возможность быстро найти файл, не надо лазить по каталогам

Недостатки системы:

  • Различные пользователи могут создать файлы с одинаковыми именами.

2.2.2 Двухуровневые каталоговые системы

Для каждого пользователя создается свой собственный каталог.

Двухуровневая каталоговая система

Пользователь, при входе в систему, попадает в свой каталог и работает только с ним. Это делает проблематичным использование системных файлов.

Эту проблему можно решить созданием системного каталога, с общим доступом.

Если у одного пользователя много файлов, то у него тоже может возникнуть необходимость в файлах с одинаковыми именами.

2.2.3 Иерархические каталоговые системы

Каждый пользователь может создавать столько каталогов, сколько ему нужно.

Иерархическая каталоговая система

Почти все современные универсальные ОС, организованы таким образом. Специализированным ОС это может быть не нужным.

2.2.4 Имя пути

Для организации дерева каталогов нужен некоторый способ указания файла.

Два основных метода указания файла:

  • абсолютное имя пути — указывает путь от корневого каталога, например:
    — для Windows \usr\ast\mailbox
    — для UNIX /usr/ast/mailbox
    — для MULTICS >usr>ast>mailbox

  • относительное имя пути — путь указывается от текущего каталога (рабочего каталога), например:
    — если текущий каталог /usr/, то абсолютный путь /usr/ast/mailbox перепишется в ast/mailbox
    — если текущий каталог /usr/ast/, то абсолютный путь /usr/ast/mailbox перепишется в mailbox
    — если текущий каталог /var/log/, то абсолютный путь /usr/ast/mailbox перепишется в ../../usr/ast/mailbox

./ — означает текущий каталог

../ — означает родительский каталог

2.2.5 Операции с каталогами

Основные системные вызовы для работы с каталогами:

  • Create — создать каталог

  • Delete — удалить каталог

  • OpenDir — закрыть каталог

  • CloseDir — закрыть каталог

  • ReadDir — прочитать следующий элемент открытого каталога

  • Rename — переименование каталога

  • Link — создание жесткой ссылки, позволяет файлу присутствовать сразу в нескольких каталогах.

  • Unlink — удаление ссылки из каталога

В общем, нашёл, что под Windows ограничение на 255 символов, а под Linux на 255 байт, и написал такой код для копирования файлов с переименованием (там в имени сохраняются координаты прямоугольиков, и их может быть много, не лучшее решение, но это не я придумал).

std::string filename = current_image->path().stem().string();

        #if OS == LINUX
        for (const auto& ch : filename)
            if (!std::isalpha(ch) && !std::isdigit(ch) &&
                ch != ' ' && ch != '.' &&ch != '-' && ch != '_')
            {
                QMessageBox::warning(
                    this, "Warning",
                    "Файл не будет сохранён, т.к. содержит недопустимые символы в "
                    "своём имени.\nДопустимые символы: латинские буквы, цифры, "
                    "пробел, точка, '-' и '_'."
                );

                goto filename_invalidity;
            }
        #endif

        for (const auto& rect : rect_grabber->getRects())
        {
            std::string rect_data = "_["
                + std::to_string(rect.x()) + "," + std::to_string(rect.y()) + ","
                + std::to_string(rect.width()) + "," + std::to_string(rect.height()) + ","
                + rect.getType() + "]";

            if (filename.size() + rect_data.size()
                    + current_image->path().extension().string().size() <= 255)
            {
                filename += rect_data;
            }
            else
            {
                QMessageBox::warning(
                    this, "Warning",
                    "Имя файла превысило максимально допустимую длину (255 символов)."
                    " Часть данных разметки не будет сохранена в имени файла."
                );

                break;
            }
        }

        filename += current_image->path().extension().string();

        fs::copy(current_image->path(),fs::path{load_window->getOutDirPath()/filename});
    }

Всё это падает сразу после вывода второго QMessageBox::warning, т.е. при сохранении с переименованием. Но сам алгоритм исключает ситуацию, что будет сохранено более 255 символов (включая расширение с точкой). Что не так?

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Video for windows compatible codec
  • Cut the rope for windows 10
  • Нужно ли обновлять java на windows 10
  • Fujitsu lifebook ah531 драйвера windows 10 64 bit
  • Vmware последняя версия для windows 7