Как исправить проблему «имя файла слишком длинное» в windows

Модуль fs

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

После этого у вас будет доступ к его методам, среди которых отметим следующие, некоторые из которых вам уже знакомы:

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

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

Например:

Использование синхронных методов серьёзно влияет на то, как работает программа.

Исследуем метод . Вот асинхронная версия этого метода, использующая коллбэки:

При использовании его синхронной версии для обработки ошибок используется конструкция :

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

Ошибка «Не распознается как внутренняя или внешняя команда» вызывает:

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

1. Исполняемый файл или скрипт не установлены

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

2. Имя файла и путь указаны неверно.

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

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

Серия каталогов, известная как «Путь», находится в разделе «Системные переменные» в переменных среды Windows и требуется для выполнения команд. Здесь также должен находиться ваш файловый каталог, особенно если вы не указываете полный путь к вашему файлу в командной строке

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

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

4. Исполняемые файлы в system32 не найдены в 64-битной Windows

Для тех, кто использует 64-битную Windows, может быть другая потенциальная причина ошибки.

Для 64-разрядных программ Windows используется каталог «C: Windows System32», а для 32-разрядных программ — «C: Windows SysWOW64».

Хотя большинство исполняемых файлов находится в обоих этих каталогах, некоторые из них существуют только в System32, и лишь некоторые из них — в SysWOW64.

По умолчанию «Путь» переменных среды Windows содержит папку C: Windows System32. Это означает, что при работе в 64-разрядной среде командная строка ищет каталог пути в C: Windows System32. Поэтому, если вы хотите запускать 32-битные программы, вы должны выполнять их в 32-битной среде.

Объем модуля¶

{нить}

Имя каталога текущего модуля. Это то же самое, что и принадлежащий .

Пример: бег из

{нить}

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

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

Видеть для имени каталога текущего модуля.

Примеры:

Бег из

Учитывая два модуля: а также , куда это зависимость от и есть структура каталогов:

Ссылки на в вернусь в то время как ссылки на в вернусь .

{Объект}

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

{модуль}

Ссылку на текущий модуль см. В разделе о . Особенно, используется для определения того, что модуль экспортирует и делает доступным через .

  • {строка} имя модуля или путь
  • Возвращает: {любой} экспортированное содержимое модуля

Используется для импорта модулей, , и локальные файлы. Модули можно импортировать из . Локальные модули и файлы JSON можно импортировать, используя относительный путь (например, , , , ), который будет разрешен для каталога, названного (если определено) или текущий рабочий каталог. Относительные пути стиля POSIX разрешаются независимо от ОС, что означает, что приведенные выше примеры будут работать в Windows так же, как и в системах Unix.

{Объект}

Модули кэшируются в этом объекте, когда они требуются. Удалив значение ключа из этого объекта, следующий перезагрузит модуль. Это не относится к нативные дополнения, для которых перезагрузка приведет к ошибке.

Также возможно добавление или замена записей. Этот кеш проверяется перед собственными модулями, и если в кеш добавляется имя, соответствующее собственному модулю, только -prefixed require вызовы будут получать собственный модуль

Используйте осторожно!

Инструктировать о том, как обрабатывать определенные расширения файлов.

Обработка файлов с расширением в качестве :

Устарело. Раньше этот список использовался для загрузки модулей, отличных от JavaScript, в Node.js путем их компиляции по запросу. Однако на практике есть гораздо лучшие способы сделать это, например, загрузить модули через какую-нибудь другую программу Node.js или заранее скомпилировать их в JavaScript.

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

{модуль}

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

В сценарий:

  • {строка} Путь к модулю для разрешения.
  • {Объект}
  • {string []} Пути для определения местоположения модуля. Если присутствует, эти пути используются вместо путей разрешения по умолчанию, за исключением нравиться , которые всегда включены. Каждый из этих путей используется в качестве отправной точки для алгоритма разрешения модуля, что означает, что иерархия проверяется из этого места.
  • Возвращает: {строка}

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

Если модуль не может быть найден, выдается ошибка.

  • {строка} Путь к модулю, пути поиска которого извлекаются.
  • Возвращает: {string [] | null}

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

Чтение файлов в Node.js

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

Если надо, можно воспользоваться синхронной версией этого метода — :

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

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

Основные модули¶

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

Основные модули определены в исходном коде Node.js и расположены в папка.

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

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

Менее простые исправления

Не всегда легко решить эту проблему. Иногда вы не можете изменить имена файлов или каталогов по какой-либо причине.

Следующие решения помогут вам. Их не сложно сделать.

Перемещение, удаление или копирование файлов или каталогов с помощью PowerShell

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

Обратите внимание, что слова каталог и папка являются взаимозаменяемыми. Мы будем использовать «каталог» в будущем

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

Возможно, путь к файлу выглядит примерно так:

C: Users guymc Documents Это Is Точно Параметр Precise Directory Путь Это I Потребность К Have К Keep My Files Рассортировано В А Маннер Это ДАЕТ Sense К Me Так Lets Притворись В этом Is An Actual Filepath что вы Might Также Have на Ваш Windows компьютер А не Over Think It Document.docx

Этот путь к файлу составляет 280 символов. Поэтому мы не можем скопировать каталог оттуда куда-либо еще с помощью обычного метода копирования-вставки. Мы получаем ошибку Destination Path Too Long.

Давайте предположим, что по какой-то причине мы не можем переименовать каталоги, в которые вложен файл. Что мы делаем?

Откройте PowerShell. Если вы еще не использовали PowerShell, прочитайте нашу статью «Использование PowerShell для домашних пользователей — Руководство для начинающих». Вы можете сделать следующие шаги, не читая статью, хотя.

Когда откроется PowerShell, вы окажетесь в корне своего пользовательского каталога. Продолжайте, предполагая, что C: Users guymc — ваш пользовательский каталог.

Каталог с именем This находится внутри каталога Documents. Чтобы перейти в каталог Documents, мы используем команду DOS cd Documents.

Вы увидите быстрое изменение C: Users guymc Documents. Это хорошо. Мы работаем ближе к каталогам, которые облегчат жизнь.

Копирование каталога с использованием Copy-Item

Мы хотим скопировать каталог This и его содержимое в ThatNewFolder. Давайте используем командлет PowerShell Copy-Item с параметрами -Destination и -Recurse.

-Предназначение сообщает PowerShell, где мы хотим, чтобы копия находилась. -Рекурс говорит PowerShell скопировать все элементы внутри к месту назначения. Копирование оставляет оригиналы там, где они есть, и делает все новые в месте назначения.

Copy-Item This -Destination ThatNewFolder -Recurse

Переместить каталог с помощью Move-Item

Допустим, мы хотим переместить каталог This, а также все каталоги и файлы в нем в ThatNewFolder. Перемещение не оставляет оригинал на месте.

Мы можем использовать командлет PowerShell Move-Item с параметрами -Path и -Destination. -Path определяет элемент, который мы хотим переместить, и -Destination сообщает PowerShell, где мы хотим его получить.

Командлет поместит это в ThatNewFolder. Он также будет перемещать все, что находится внутри этого каталога. Move-Item может использоваться для перемещения файлов или каталогов, и он работает независимо от пути к файлу или длины имени файла.

Move-Item -Path This -Destination ThatNewFolder

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

Удалить каталог с помощью Remove-Item

Если мы хотим удалить этот каталог и все в нем, мы используем командлет Remove-Item.

Командлет Remove-Item обладает некоторой встроенной безопасностью, которая затрудняет удаление каталога с содержимым внутри него. В нашем примере мы знаем, что хотим удалить все, поэтому мы будем использовать параметры -Recurse, чтобы заставить его удалять все внутри, и -Force, чтобы он делал это, не спрашивая нас, уверены ли мы в каждом элементе внутри.

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

Remove-Item This -Recurse -Force

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

Создание сервера Express для API при помощи Node.js

В предыдущем руководстве мы рассмотрели, что из себя представляет архитектура REST, шесть основных требований, которые выдвигаются к REST, значение методов запроса HTTP и кодов состояния ответов и структуру конечной точки RESTful API .

В этом руководстве мы создадим сервер, на котором будет располагаться наш API. Вы можете создавать API при помощи любого языка программирования и любого серверного программного обеспечения, однако мы будем использовать платформу Node.js, которая является реализацией JavaScript для стороны сервера, и Express – популярный фреймворк для Node.js с самым необходимым функционалом.

Папки как модули¶

Удобно организовать программы и библиотеки в автономные каталоги, а затем предоставить единую точку входа в эти каталоги. Существует три способа передачи папки в как аргумент.

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

Если бы это было в папке на , тогда попытается загрузить .

Это степень осознания файлы в Node.js.

Если нет файл присутствует в каталоге, или если запись отсутствует или не может быть разрешена, тогда Node.js попытается загрузить или файл из этого каталога. Например, если не было файл в предыдущем примере, затем попытается загрузить:

Если эти попытки не удастся, Node.js сообщит об отсутствии всего модуля с ошибкой по умолчанию:

6 способов показать расширения файлов в Windows 11

Давайте рассмотрим все способы, с помощью которых вы можете сделать расширения файлов видимыми в Windows 11.

Проводник в Windows всегда позволял скрывать или показывать расширения файлов несколькими щелчками мыши. Вот как показать расширения файлов в Windows 11:

Нажмите Win + E, чтобы открыть проводник. Или щелкните по нему на панели задач.

Теперь нажмите «Просмотр» на панели инструментов выше.

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

Как только вы это сделаете, вы включите видимость для расширений файлов.

Метод № 02: Использование проводника — Параметры папки

Проводник также позволяет отображать расширения файлов из параметра «Параметры папки». Вот как это сделать:

Откройте проводник, нажав Win + E. Затем щелкните значок с тремя точками вверху.

Выберите Параметры.

Щелкните вкладку «Просмотр», чтобы переключиться на нее.

Теперь убедитесь, что флажок Скрывать расширения для известных типов файлов снят. Затем нажмите ОК.

Другой способ просмотреть расширения файлов — добавить столбец «Тип» файла в проводник. Это работает только в том случае, если вы установили для параметра «Просмотр» значение «Подробности» или «Содержимое». Вот как выполнить весь процесс:

Откройте проводник и перейдите в папку, содержащую несколько файлов. Затем нажмите «Просмотр» вверху.

Выберите «Детали» или «Содержимое». В нашем примере мы выбираем первое.

Откроется подробная информация о файлах. Чтобы добавить столбец «Тип», щелкните правой кнопкой мыши любой столбец в верхней части файлов.

Затем выберите Тип.

Теперь вы увидите столбец «Тип», в котором отображаются расширения файлов.

Метод № 04: Использование редактора реестра

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

Нажмите Win + R, чтобы открыть диалоговое окно ЗАПУСК. Затем введите regedit и нажмите Enter.

Теперь перейдите по следующему адресу в редакторе реестра:

Компьютер HKEY_CURRENT_USER Software Microsoft Windows CurrentVersion Explorer Advanced

Или просто скопируйте приведенное выше и вставьте его в адресную строку редактора реестра.

Затем нажмите Enter. Справа дважды щелкните HideFileExt.

Измените его значение data с 1 на 0. Затем нажмите OK.

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

Метод № 5: Использование командной строки

Для тех, кто любит работать с терминалом Windows, например с командной строкой, вот как вы можете показать расширения файлов с помощью простой команды:

Сначала нажмите «Пуск», введите cmd и нажмите «Запуск от имени администратора».

reg add HKCU Software Microsoft Windows CurrentVersion Explorer Advanced / v HideFilesExt / t REG_DWORD / d 0 / f

Затем нажмите Enter. Вы должны увидеть сообщение «операция завершена успешно».

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

Метод # 6: Использование пакетного сценария

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

Щелкните правой кнопкой мыши на рабочем столе и выберите «Создать»> «Текстовый документ».

Откройте этот файл Блокнота и введите в него следующее:

reg add HKCU Software Microsoft Windows CurrentVersion Explorer Advanced / v HideFileExt / t REG_DWORD / d 0 / f

Или просто скопируйте приведенное выше и вставьте его в файл Блокнота.

Затем щелкните Файл.

Щелкните Сохранить как.

Дайте этому файлу имя и обязательно добавьте .bat в его конец.

Затем щелкните раскрывающееся меню рядом с «Сохранить как тип» и выберите «Все файлы».

Затем нажмите «Сохранить».

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

Вопрос первый: Content-Type

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

Передача файла из HTML-формы:

Первый способ и наверное самый распространнённый — это передача файла из HTML-формы. Если особо не мудрить с JavaScript на клиенте, то файл, прикреплённый через поле , отправится на сервер именно таким способом. Представим, что у нас есть следующая форма на странице:

123456
<form action="" method="post" enctype="multipart/form-data">    <input type="text" name="field1">    <input type="file" name="my_file">    <input type="text" name="field2">    <button type="submit">Send</button></form>

Если отправить файл из такой формы, то HTTP-запрос будет выглядеть как-то так:

123456789101112131415161718192021222324252627
POST / HTTP/1.1Host: localhost:8089Content-Length: 316066Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryj1yY9PZhcv5EFcOcAccept-Encoding: gzip, deflate, br------WebKitFormBoundaryhTSfiKpL4LvMkLXxContent-Disposition: form-data; name="field1"Test 1------WebKitFormBoundaryhTSfiKpL4LvMkLXxContent-Disposition: form-data; name="my_file"; filename="Screenshot from 2017-01-08 02-23-17.png"Content-Type: image/pngPNGIHDRpx#6sBIT|dtEXtSoftwaregnome-screenshot> IDATxwx\?I.{`0	-	d,iolvMe)8;$1pElf-Kf3fF=a+u}^TU"I&lA0t~*?DHii ##uu$d::AZGZG2HHH !5HkHcI0`9GY0HkPvOPU}1|heiY>Tb^C	E	 J9Z17)J]wqkxs;(J[F;;:R"#HH-:R"#HH-:R"#HH-.iAZCjQ*A;>Q.........------WebKitFormBoundaryj1yY9PZhcv5EFcOcContent-Disposition: form-data; name="field2"Test 2------WebKitFormBoundaryj1yY9PZhcv5EFcOc--

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

В общем, при таком способе сам файл передаётся в перемешку с полями из формы. Но это не всегда нужно. Бывает, что нужно отправить только лишь файл и ничего более. Это чаще применимо к RESTful API или каким-нибудь динамическим пользовательским интерфейсам, в которых загрузка файлов происходит до отправки формы, т.е. отдельно от данных в форме. Поэтому давайте рассмотрим отправку другим способом.

Передача голых файлов:

Проще всего показать пересылку таких файлов на примере утилиты cUrl.

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

1
$ curl -iv http://localhost:3000 -T "./Screenshot from 2017-01-08 02-23-17.png"

Посмотрим что говорит Wireshark:

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

Я нашёл хорошую обзорную статью со сравнениями этих двух вышеописанных способов. В статье есть конкретные примеры. Например, говорится, что YouTube для загрузки видео использует второй способ. Если интересно можно почитать: https://philsturgeon.uk/api/2016/01/04/http-rest-api-file-uploads/.

Установка

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

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

Давайте создадим папку проекта под названием и перейдем в нее.

Теперь, когда мы в ней, мы можем инициализировать наш проект, выполнив команду init.

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

Теперь, когда у нас есть package.json, мы можем установить зависимости, необходимые для нашего проекта. К счастью, нам нужны только следующие:

  • body-parser – промежуточное ПО для разбора тела запросов;
  • express – веб-фреймворк с самым необходимым функционалом, который мы будем использовать для создания нашего сервера;
  • mysql:  драйвер MySQL;
  • request (необязателен) – легкий способ выполнения запросов HTTP;

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

В результате будут созданы файл package-lock.json, папка node_modules, и package.json теперь будет выглядеть подобно следующему:

Почему длина имени файла является проблемой в Windows?

Существует большая история длины файлов, что является проблемой для операционных систем, таких как Windows. Было время, когда вы не могли иметь имена файлов длиннее 8 символов плюс 3-символьное расширение файла. Лучшее, что вы могли сделать, это что-то вроде myresume.doc. Это было ограничение в отношении дизайна файловой системы.

Все стало лучше, когда вышли новые версии Windows. Мы перешли от старой ограниченной файловой системы к так называемой файловой системе новой технологии (NTFS). NTFS привела нас к тому, что имя файла может быть длиной 255 символов, а длина пути к файлу потенциально может достигать 32 767 символов. Так как же мы можем иметь слишком длинные имена файлов?

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

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: