Windows пробел в имени файла

В средах командной строки, таких как командная строка Windows и PowerShell, пробелы используются для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы. Чтобы указать путь к файлу имеющего символ пробела в названии или пути к файлу, вам нужно «экранировать» его.

Почему нужно избегать символ пробела?

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

Например, предположим, что у вас есть текстовый файл, содержимое которого вы хотите просмотреть. Вы можете сделать это с помощью команды type. Предполагая, что текстовый файл находится по адресу C:\Папка\File.txt, следующая команда в командной строке покажет содержимое файла:

Отлично! А что, если у вас есть такой же файл по адресу C:\Новая папка\File.txt? Если вы попробуете выполнить приведенную ниже команду, это не сработает — пробелы в пути к файлу мешают правильно обработать команду.

type C:\Новая папка\File.txt

Командная строка считает, что вы пытаетесь найти файл с именем Новая, в результате вы получаете: «Ошибка во время обработки: C:\Новая.
Системе не удается найти указанный путь.».
Тоже самое будет? если пробел есть в имени файла New File.txt

Ошибка командной строки при отсутствии экранирования пробелов

Три способа избежать ошибок из-за символа пробел в Windows 10

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

  1. Заключив путь (или его части) в двойные кавычки ().
  2. Добавляя символ вставки (^) перед каждым пробелом. (Это работает только в командной строке / CMD.)
  3. Добавляя знак ударения (`) перед каждым пробелом. (Это работает только в PowerShell.)

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

Заключите путь к файлу в кавычки («)

Стандартный способ убедиться, что Windows правильно обрабатывает путь к файлу, — заключить его в двойные кавычки ". Например, в нашем примере команды выше мы просто выполняем следующее:

type "C:\Новая папка\Test File.txt"

Вы можете заключить части пути в кавычки, если хотите. Например, предположим, что у вас есть файл с именем File.txt в этой папке. Вы можете запустить следующее:

type C:\"Новая папка"\File.txt

Однако в этом нет необходимости — в большинстве случаев вы можете просто заключить весь путь в кавычки.

Это решение работает как в традиционной среде командной строки (CMD), так и в Windows PowerShell.

Заключение пробелов в двойные кавычки в командной строке

Иногда: используйте символ каретки для правильной обработки пробелов (^)

В командной строке символ каретки ^ теоретически позволяет избежать пробелов. Просто добавьте его перед каждым пробелом в имени файла. (Вы найдете этот символ в числовом ряду на клавиатуре. Чтобы ввести символ каретки, нажмите Shift + 6.)

Вот проблема: хотя это должно работать, а иногда и работает, это работает не всегда. Командная строка обрабатывает этот символ странно.

Например, запустите следующую команду, но она не сработает:

type C:\Новая^ папка\Test^ File.txt

Ошибка экранирования пробела в командной строке

С другой стороны, если мы попытаемся открыть наш файл напрямую, введя его путь в командную строку, мы увидим, что символ каретки правильно экранирует пробелы:

C:\Новая^ папка\Test^ File.txt

Экранирование пробела каретки работает в командной строке

Итак, когда это работает? Что ж, исходя из нашего исследования, похоже, что с некоторыми приложениями он работает, а с другими — нет. Это может варьироваться в зависимости от команды, которую вы используете. Командная строка обрабатывает этот символ странно. Если вам интересно, попробуйте с любой командой, которую вы используете, — она ​​может работать, а может и не работать.

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

PowerShell: используйте символ ударения (`)

PowerShell использует знак ударения ` в качестве символа-пробела. Просто добавьте его перед каждым пробелом в имени файла. (Вы найдете этот символ над клавишей Tab и под клавишей Esc на клавиатуре.)

type C:\Новая` папка\Test` File.txt

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

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

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

Если вы знакомы с UNIX-подобными операционными системами, такими как Linux и macOS, вы, возможно, привыкли использовать символ обратной косой черты (\) перед пробелом, чтобы правильно обработать команду. Windows использует его для пути к файлам, поэтому он не работает — символы каретки (^) и ударения (`) это своего рода обратная косая черта Windows в зависимости от того, какую оболочку вы используете.

Пути файловых систем в Windows страннее, чем можно подумать. В любой производной от Unix системе пути на удивление просты: если нечто начинается с /, то это путь. Но всё совершенно иначе в Windows, которая имеет озадачивающее разнообразие схем составления пути.

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

Стоит заметить, что статья ограничивается только тем типом путей, который видит пользователь приложений Windows (обусловленный Win32 API). Под этим слоем есть ещё больше любопытного, в основном касающегося тех, кто пишет драйверы оборудования и тому подобное.

Вкратце

Форматы абсолютных путей

Форматы относительных путей

Запрещённые символы

Ограничения длины

Схемы путей Windows

В Windows существует три разных вида абсолютного пути и три разных типа относительного пути.

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

Абсолютные, или полные пути — это завершённые пути, сами по себе уникальным образом идентифицирующие местоположение в файловой системе.

Пути к диску

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

D:\Doughnut preferences\With jam in

UNC-пути

UNC расшифровывается как Universal Naming Convention, это описание файлов, начинающееся с \\, часто используемое для ссылок на сетевые накопители. Первый сегмент после \\ — это хост, который может быть или сервером с именем, или IP-адресом:

\\Work\Hard
\\192.168.1.15\Hard

UNC-пути также можно использовать для доступа к локальным дискам:

\\localhost\C$\Users\Andrew Fletcher
\\127.0.0.1\C$\Users\Alan Wilder

Или с использованием имени компьютера:

\\Pipeline\C$\Users\Martin Gore

Символ $ в C$ обозначает скрытую административную общую папку; он не заменяет двоеточие рядом с именем диска :. Общие диски в стиле C$ — это просто удобные ярлыки, автоматически создаваемые Windows. Доступ к дискам через них возможен, только если вы вошли как администратор.

Стоит также заметить, что \\Pipeline сам по себе не валидный путь к папке, он идентифицирует только сервер. Чтобы попасть в папку, нужно добавить имя общей папки.

Пути к устройству

Путь к устройству начинается с одного из следующих фрагментов:

  • \\?\
  • \\.\

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

Синтаксис доступа к локальной папке выглядит как один из этих вариантов:

\\?\Z:\Animals\Cute
\\.\Z:\Animals\Cunning

Если вам нужно ещё больше загадочности, то можно также подставить эквивалентный Z: идентификатор устройства:

\\?\Volume{59e01a55-88c5-411f-bf0b-92820bdb2548}\Animals\Cryptic

Здесь Volume{59e01a55-88c5-411e-bf0a-92820bdb2549} — это идентификатор дискового тома, на котором находится Z: в компьютере.

Также существует специальный синтаксис для описания UNC-путей как путей к устройству:

\\?\UNC\localhost\Z$\Animals\Curious

В путях к устройству часть, идущая после \\?\ или \\.\ — это имя, определённое во внутреннем пространстве имён Object Manager Windows. Те, кому любопытно исследовать это пространство имён, могут скачать инструмент WinObj и посмотреть.

Нормализованные и литеральные пути к устройству

Так в чём же разница между \\?\ и \\.\?

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

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

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

Относительные пути

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

Пути, относительные к текущей папке

Эти пути используют в качестве начальной точки текущую папку, например, .\Torquay относится к подпапке текущей папки, а ..\Wales относится к подпапке родителя текущей папки.

Папки, относительные к корню текущего диска

Если начать путь с одной \, то путь интерпретируется как относительный к корню текущего диска. Поэтому если вы находитесь в любом месте диска E: и введёте \Africa, то окажетесь в E:\Africa.

Когда доступ к текущей папке выполняется через UNC-путь, то путь, относительный к текущему диску, интерпретируется относительно к общей корневой папке, допустим \\Earth\Asia.

Пути, относительные к текущей папке диска

Эти более редко используемые пути указывают диск без обратной косой черты, например E:Kreuzberg, и интерпретируются относительно к текущей папке этого накопителя. На самом деле это имеет смысл только в контексте оболочки командной строки, отслеживающей текущую рабочую папку для каждого диска.

Это единственный тип путей, не поддерживаемый Fileside, потому что в нём нет понятия текущей папки каждого диска. Текущую папку имеют только панели.

Нормализация

Как говорилось ранее, все пути, за исключением литеральных путей к устройству, перед использованием проходят процесс нормализации. Этот процесс состоит из следующих этапов:

  • Замена косых черт (/) на обратные косые черты (\)
  • Сворачивание повторяющихся разделителей в виде обратных косых черт в один
  • Резолвинг относительных путей заменой всех . или ..
  • Отсечение завершающих пробелов и точек

Таким образом, в общем случае можно указывать пути Windows при помощи косых черт.

Правила именования в Windows

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

Запрещённые символы

В имени нельзя использовать следующие символы:

< > " / \ | ? *

Также исключаются любые непечатаемые символы со значением ASCII меньше 32.

Хитрое двоеточие

В большинстве случаев : также запрещено.

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

Опасная точка

Символ . допустим внутри или в начале имени, но запрещён в конце.

Начинающие и завершающие пробелы

Любопытно, что Windows допускает пробелы в начале, но не в конце имён. Так как имя с пробелами в начале и конце часто выглядит похожим на имя без пробелов, обычно это ужасная идея, и при переименовании или создании файлов Fileside автоматически удаляет их.

Запрещённые имена

По историческим причинам нельзя использовать следующие имена:

CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9.

Это включает и имена с расширениями. Например, если вы назовёте файл COM1.txt, то внутри он преобразуется в \\.\COM1\ и интерпретируется самой Windows как устройство. А это не то, что нам нужно.

Чувствительность к регистру

В большинстве случаев Windows не делает различий между символами в верхнем и нижнем регистре в путях.

C:\Polish hamlet, c:\polish Hamlet, C:\Polish Hamlet и C:\POliSh hAMlET считаются абсолютно одинаковыми.

Однако с обновления Windows 10 за апрель 2018 года файловые системы NTFS имеют опцию включения чувствительности к регистру на уровне папок.

Ограничения длины

Мы ещё не закончили: ограничения есть и на длину.

Пути

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

Этот обход заключается в преобразовании каждого пути в литеральный путь к устройству перед передачей его Windows. Сделав это, мы сможем обойти ограничение в 260 символов и увеличить его до чуть более щедрого предела в 32767 символов.

Имена

Имена файлов и папок не могут быть длиннее 255 символов.

Так много способов сказать одно и то же

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

  • C:\CHAMELEON
  • c:\chameleon
  • C:\/\\//\\\///Chameleon
  • C:\Windows\..\Users\..\Chameleon
  • \\localhost\C$\Chameleon
  • \\127.0.0.1\C$\Chameleon
  • \\?\C:\Chameleon
  • \\.\C:\Chameleon
  • \\.\UNC\localhost\C$\Chameleon
  • \\?\Volume{59e01a55-88c5-411e-bf0a-92820bdb2549}\Chameleon
  • \\.\GLOBALROOT\Device\HarddiskVolume4\Chameleon
  • и так далее

Вот что получаешь, когда приходится обеспечивать полную обратную совместимость в течение нескольких десятилетий!

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

Поддержка процесса сборки имен папок с пробелами или специальными символами

Имена папок с пробелами

В системе Windows® генератор кода подключает диск, соответствующий папке установки MATLAB® для любого из этих условий:

  • matlabroot папка является местоположением UNC.

  • Путь matlabroot папка содержит пробелы, и система не имеет никакой альтернативной поддержки имени.

Эти пути к папкам могут содержать пробелы:

  • Путь к вашей папке установки MATLAB (matlabroot). Например, C:\Program Files\MATLAB\R2015b

  • Путь к текущей рабочей папке, где вы запускаете сборку (pwd). Например, C:\Users\username\Documents\My Work.

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

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

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

    • Для систем Linux® и систем Windows с 8,3 включенными созданиями имени, набор инструментальных средств управляет пробелами на имена папок при помощи альтернативных имен от операционной системы. Набор инструментальных средств использует TransformPathsWithSpaces припишите, чтобы управлять этими именами.

      addAttribute(toolchainObject, 'TransformPathsWithSpaces', true);

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

    • Для систем Windows с 8,3 отключенными созданиями имени набор инструментальных средств управляет пробелами на имена папок путем подключения сетевого диска с помощью пакетного файла (.bat). Эта операция требует добавления RequiresBatchFile припишите определению набора инструментальных средств.

      addAttribute(toolchainObject, 'RequiresBatchFile', true);

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

  • Если вы используете подход make-файла шаблона, чтобы создать сгенерированный код, make-файл шаблона (.tmf) требует, чтобы код управлял пробелами на имена папок. Когда альтернативные имена папок (краткие названия Windows) отличаются от имен папки файловой системы (Windows долго называет), добавьте этот код в make-файл.

    ALT_MATLAB_ROOT         = |>ALT_MATLAB_ROOT<|
    ALT_MATLAB_BIN          = |>ALT_MATLAB_BIN<|
    !if "$(MATLAB_ROOT)" != "$(ALT_MATLAB_ROOT)"
    MATLAB_ROOT = $(ALT_MATLAB_ROOT)
    !endif
    !if "$(MATLAB_BIN)" != "$(ALT_MATLAB_BIN)"
    MATLAB_BIN = $(ALT_MATLAB_BIN)
    !endif

    Когда значения лексем местоположения не равны, этот код заменяет MATLAB_ROOT с ALT_MATLAB_ROOT. Замена указывает, что путь к вашей папке установки MATLAB включает пробелы. Этот код применяет тот же тип замены для MATLAB_BIN с ALT_MATLAB_BIN. Предыдущий код характерен для nmake. Для специфичных для платформы примеров смотрите предоставленные make-файлы шаблона.

С любым подходом сборки, когда существует проблема с поддержкой создания альтернативных названий (краткие названия), ошибки сборки могут произойти на Windows. Если сборка генерирует сообщение об ошибке, похожее на следующее сообщение, смотрите Ошибки Поиска и устранения проблем, Когда Имена папок Имеют Пробелы.

NMAKE : fatal error U1073: don't know how to make ' ...

При использовании команд операционной системы, таких как system или dos, заключите пути, которые задают исполняемые файлы или параметры команды в двойных кавычках (" "). Например:

system('dir "D:\Applications\Common Files"')

Эта таблица предоставляет сводные данные поддержки папки сборки и ограничений forWindows.

Папки процесса сборки Приблизьтесь для путей с UNC или пробелами Поддержка Windows

matlabroot папка

matlabroot значение получено на местоположение установки MATLAB.

Во время сборки, местоположение UNC, такое как:

\\networkdrive\matlab\R20xxb

мог быть повторно сопоставлен как:

T:\

Во время сборки в системе Windows с коротким именем файла (8.3) поддержка (значение по умолчанию для Windows с помощью NTFS), процесс сборки использует Windows API getShortPathName() для местоположения папки.

Во время сборки в системе Windows без короткого имени файла (8.3) поддержка (системное использование ReFS или использование NTFS с 8,3 отключенной поддержкой), местоположение с пробелами в пути, такими как:

C:\Program Files\MATLAB\R20xxb

мог быть повторно сопоставлен как:

T:\R20xxb

Папка процесса сборки поддерживает доступного независимого политика файловой системы (NTFS или ReFS) или конфигурация файловой системы для короткой поддержки имени файла.

Limitations:

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

В системах без короткого имени файла (8.3) поддержка (использующий ReFS или использующий NTFS с 8,3 отключенной поддержкой), итоговая папка в месте установки не может содержать пробелы. Например, итоговое имя папки:

C:\Program Files\MATLAB\R20xxb sp1

не поддержан.

Папка генерации кода

Папка кэша симуляции

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

  • rtwmakecfg.m

  • Параметр конфигурации модели Additional build information

  • Заменяющая библиотека кода

Для местоположений UNC процесс сборки временно подключает диск при помощи команд интерпретатора pushd и popd.

Поддержка папки процесса сборки является доступным независимым политиком файловой системы (NTFS или ReFS) или конфигурация файловой системы для короткой поддержки пути.

Для путей с пробелами процесс сборки использует Windows короткий путь (8.3) при помощи Windows API:

getShortPathName()

Поддержка папки процесса сборки зависит от файловой системы NTFS и требует поддержки значения по умолчанию Windows. Реестр устанавливает значение 2 или 0 для:

NtfsDisable8dot3NameCreation

Процесс сборки Limitations: не поддерживает пробелы в пути к этим папкам для:

  • Файловая система NTFS с короткой отключенной поддержкой пути

  • Файловая система ReFS (эта файловая система не поддерживает короткие пути),

Имена папок со специальными символами

Если связанный со сборкой путь к папке содержит японский (многобайтовый) символ, где итоговый байт равен 5C шестнадцатеричный символ, процесс сборки может произвести ошибку. Делать и инструменты компилятора могут неправильно интерпретировать итоговый байт как '\' (обратная косая черта) символ.

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

На Windows, когда существует проблема с поддержкой создания коротких имен файлов, могут произойти ошибки процесса сборки. Когда эта проблема влияет на сборку, вы видите сообщение об ошибке, похожее на:

NMAKE : fatal error U1073: don't know how to make 'C:\Work\My'

Это сообщение может произойти если пробел на имя папки (C:\Work\My Models) препятствует тому, чтобы процесс сборки нашел, что модель или файл создают. Для описаний связанных со сборкой папок, которые чувствительны к пробелу на имя папки или путь, смотрите Имена папок с Пробелами.

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

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

  • 8,3 имен

  • Путь к DOS

  • короткое имя файла (SFN, ShortFileName)

  • долго называйте псевдоним

  • Псевдоним пути к Windows

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

  • Если файловой системой является ReFS (Эластичная Файловая система), это — проблема. ReFS не оказывает поддержку короткого имени файла. За исключением папки установки MATLAB, процесс сборки не поддерживает имена папок с пробелами для файловой системы ReFS. Если ваша рабочая среда требует поддержки короткого имени файла папки сборки или дополнительных внешних папок кода, не используйте ReFS.

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

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

  1. Откройте командную строку Windows, запустившись как администратор. Например, от Windows Start menu, введите cmd, щелкните правой кнопкой по cmd.exe значок, и выбирает Run as administrator.

  2. Превратитесь в windows\system32 папка и запрос NtfsDisable8dot3NameCreation состояние путем ввода:

  3. Если состояние реестра NtfsDisable8dot3NameCreation не 2, значение по умолчанию (Установка уровня громкости), измените значение в 2 путем ввода:

    Для получения дополнительной информации о включении создания кратких названий. См. https://technet.microsoft.com/en-us/library/ff621566.aspx.

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

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

    Чтобы определить краткое имя, синтаксис:

    > fsutil file setshortname <FileName> <ShortName>

    Например, чтобы создать краткое название PROGRA~1 для длинного имени C:\Program FilesВвод:

    > fsutil file setshortname "C:\Program Files" PROGRA~1

    C:\Program Files имя папки находится в цитатах, потому что оно имеет пробелы.  

  5. Чтобы проверить, что краткое название было создано, используйте dir команда с /x опция, чтобы показать краткие названия.

Смотрите также

addAttribute

Похожие темы

  • Управляйте папками процесса сборки
  • Управляйте файлами процесса сборки
  • Управляйте зависимостями от файла процесса сборки
  • Добавьте зависимости от процесса сборки
  • Рабочий процесс процесса сборки для систем реального времени

Внешние веб-сайты

  • MATLAB Answers: “Почему процесс сборки перестал работать…?”
  • https://technet.microsoft.com/en-us/library/cc788058.aspx
  • https://technet.microsoft.com/en-us/library/cc788058.aspx

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

Понятное дело, создать файл или папку вообще без имени нельзя. Зато указать в качестве имени символ, который не отображается визуально никто не запрещает. Вполне подходящим для этой цели символом является пробел. Но вот незадача — если при создании или переименовании папки поставить только пробел в ее имени, то создается папка с именем «Новая папка» либо остается прежнее имя. 

Однако опытным пользователям хорошо известно, что символ пробела в существует не один. В частности в таблице символов присутствует такой символ, как неразрывный пробел. Его можно скопировать из таблицы символов Windows, либо (что гораздо проще) ввести с клавиатуры. Для этого необходимо удерживая клавишу Alt на цифровой клавиатуре набрать 255 или 0160. Файл или папка с неразрывным пробелом в имени создается без проблем и выглядят как безымянные.

Вообще отличие неразрывного пробела от обычного заключается в том, что если его поставить между двумя словами, то по нему не осуществляется перенос. Так что в текстах между инициалами и фамилией или других подобных случаях, когда два слова обязательно должны находиться на одной строке, правильнее использовать именно неразрывный пробел.
Кстати в MS Word неразрывный пробел можно вставить комбинацией клавиш «Ctrl+Shift+Пробел».
Вернемся к безымянным файлам. В отличии от папки, обычный пробел в качестве имени файла использовать можно. Для этого при сохранении файла в редакторе нужно в поле «имя файла» указать пробел и через точку расширение файла. Вообще можно даже без пробела (: — только расширение. Разумеется, «безымянным» такой файл будет выглядеть только если в проводнике включена опция «Скрывать расширения для зарегистрированных типов файлов».

Не претендую на то, что эта информация полезна практически, но кому-то это может показаться интересным.

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

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

Имена файлов и каталогов

Все файловые системы придерживаются одних и тех же общих соглашений об именовании для отдельного файла: имя базового файла и необязательное расширение, разделяемые точкой. Однако, у каждой файловой системы, ()NTFS, и cdfs, NTFS или exFAT, FAT и FAT32, могут быть особые и иные правила о формировании отдельных компонентов пути к каталогу или файлу.

Обратите внимание, что каталог — это просто файл со специальным атрибутом, обозначающим его как каталог, но он также должен следовать всем тем же правилам именования, что и обычный файл. Поскольку термин «каталог» просто относится к определенному типу файлов в отношении файловой системы, мы будем использовать общий термин «файл» для охвата понятий каталогов и файлов данных как таковых. Из-за этого, если не указано иное, любые правила именования или использования или примеры для файла также должны применяться к каталогу. Термин путь относится к одному или нескольким каталогам, обратным косым чертам и, возможно, имени тома.

Ограничения количества символов также могут различаться и варьироваться в зависимости от используемой файловой системы и формата префикса имени пути. Это еще больше осложняется поддержкой механизмов обратной совместимости. Например, старая файловая система MS-DOS FAT поддерживает не более 8 символов для имени базового файла и 3 символа для расширения, в общей сложности 12 символов, включая разделитель точку. Файловые системы Windows FAT и NTFS не ограничиваются этим, поскольку они имеют поддержку длинных имен файлов, но они по-прежнему поддерживают предыдущие версии имен файлов.

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

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

  • Используйте точку, чтобы отделить имя базового файла от расширения в имени каталога или файла.
  • Используйте обратную косую черту (\) для разделения компонентов пути. Обратная косая черта отделяет имя файла от пути к нему, и одно имя каталога от другого имени каталога в пути. Нельзя использовать обратную косую черту в имени файла или каталога, потому что это зарезервированный символ, который разделяет имена на составляющие.
  • Не думайте о чувствительности к регистру. Например, можно считать имена OSCAR, Oscar и oscar одинаковыми, хотя некоторые файловые системы (например, файловая система, совместимая с POSIX) могут рассматривать их как разные. Обратите внимание, что NTFS поддерживает семантику POSIX для учета регистра, но это не поведение по умолчанию.
  • Обозначения томов (буквы дисков) не учитывают регистр символов. Например,» D:\ «и» d:\ » – это одно и то же.
  • Используйте любой символ на текущей кодовой странице для имени, включая символы Юникода и символы в расширенном наборе символов (128-255), за исключением следующих:
    • Следующие зарезервированные символы:
      • < (меньше)
      • > (больше)
      • : (двоеточие)
      • » (двойная кавычка)
      • / (косая черта)
      • \ (обратная косая черта)
      • | (вертикальный стержень или символ трубы)
      • ? (вопросительный знак)
      • * (звездочка)
    • Целое нулевое значение, иногда называемое символом ASCII NUL.
    • Символы, целочисленные представления которых находятся в диапазоне от 1 до 31, за исключением альтернативных потоков данных, где эти символы разрешены.
    • Любой другой символ, который целевая файловая система не разрешает использовать.
  • Используйте точку как компонент каталога в пути для представления текущего каталога, например».\temt.txt.».
  • Используйте две последовательных точки (..) как компонент каталога в пути для представления родительского каталога текущего каталога, например»..\temp.txt.»
  • Не используйте следующие зарезервированные имена для имени файла: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, и LPT. Также избегайте этих имен, за которыми следует расширение; например, NUL.txt не рекомендуется.
  • Не завершайте имя файла или каталога пробелом или точкой. Хотя файловая система может поддерживать такие названия, оболочка и пользовательский интерфейс Windows не будут работать с этим. Однако допустимо указывать точку в качестве первого символа имени. Например, «.temp».

Короткие и длинные имена

Длинным именем файла считается любое имя файла, которое превышает соглашение об именовании стиля MS-DOS (также называемое схема 8.3). При создании длинного имени файла Windows может также создать короткую форму имени 8.3, называемую псевдонимом 8.3 или коротким именем, и сохранить ее на диске. Это 8.3 псевдонимы могут быть отключены по соображениям производительности либо по всей системе, либо для указанного тома, в зависимости от конкретной файловой системы.

Во многих файловых системах имя файла будет содержать тильду ( ~ ) в каждом компоненте имени, которое слишком длинное, чтобы соответствовать правилам именования 8.3.

Не все файловые системы могут следовать соглашение о подстановке тильды, и системы могут быть настроены на отключение 8.3 генерации псевдонимов, даже если они обычно поддерживают его. Поэтому не следует делать предположение, что псевдоним 8.3 уже существует на диске.

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

  • Чтобы получить 8.3 форму длинного имени файла, используйте функцию GetShortPathName.
  • Чтобы получить версию короткого имени длинного файла, используйте функцию GetLongPathName.
  • Чтобы получить полный путь к файлу, используйте функцию GetFullPathName.

В новых файловых системах, таких как NTFS, exFAT, UDFS и FAT32, Windows сохраняет длинные имена файлов на диске в Юникоде, что означает, что исходное длинное имя файла всегда сохраняется. Это верно, даже если длинное имя файла содержит расширенные символы, независимо от кодовой страницы, которая активна во время операции чтения или записи диска.

Файлы, использующие длинные имена файлов, могут быть скопированы между разделами файловой системы NTFS и разделами файловой системы Windows FAT без потери информации об имени файла. Это может быть неверно для старых MS-DOS FAT и некоторых типов cdfs (CD-ROM) файловых систем, в зависимости от фактического имени файла. В данном случае, если это возможно, подставляется короткое имя файла.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

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

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как сделать скриншот на компьютере windows 10 с выделением определенной зоны
  • Почему нет режима гибернации в windows 10
  • Как отключить проверку микрофона windows 10
  • Remove unnecessary files from windows
  • Обновить звуковые драйвера на windows 10 онлайн