Windows get file type

GetFileType function (fileapi.h)

Retrieves the file type of the specified file.

Syntax

Parameters

A handle to the file.

Return value

The function returns one of the following values.

Return code/value Description
FILE_TYPE_CHAR 0x0002 The specified file is a character file, typically an LPT device or a console.
FILE_TYPE_DISK 0x0001 The specified file is a disk file.
FILE_TYPE_PIPE 0x0003 The specified file is a socket, a named pipe, or an anonymous pipe.
FILE_TYPE_REMOTE 0x8000 Unused.
FILE_TYPE_UNKNOWN 0x0000 Either the type of the specified file is unknown, or the function failed.

В

You can distinguish between a «valid» return of FILE_TYPE_UNKNOWN and its return due to a calling error (for example, passing an invalid handle to GetFileType) by calling GetLastError.

If the function worked properly and FILE_TYPE_UNKNOWN was returned, a call to GetLastError will return NO_ERROR.

If the function returned FILE_TYPE_UNKNOWN due to an error in calling GetFileType, GetLastError will return the error code.

Remarks

In WindowsВ 8 and Windows ServerВ 2012, this function is supported by the following technologies.

Windows get file type

Интерфейс File представляет информацию о файлах и предоставляет JavaScript в веб странице доступ к их контенту.

Объекты File как правило извлекаются из объекта FileList , который возвращён как результат пользовательского выбора файлов с помощью элемента, из drag and drop операций DataTransfer объекта, или из mozGetAsFile() API на HTMLCanvasElement . В Gecko, привилегированный код может создать файл представляющий любой локалный файл без пользовательского взаимодействия (см Gecko notes для получения большей информации.)

Объект File — особый вид Blob , и может быть использован в любом контексте так же, как и Blob. В частности, FileReader , URL.createObjectURL() , createImageBitmap() (en-US) , и XMLHttpRequest.send() допускают и Blob, и File .

Смотри Использование файлов в веб приложениях для получения более подробной информации и примеров.

Свойства

Интерфейс File также наследует свойства от Blob интерфейса:

File.lastModified (en-US) Только для чтения Возвращает время последнего изменения файла в миллисекунде с эпохи UNIX (1 января 1970 года в 00:00:00 в часовом поясе UTC). File.lastModifiedDate (en-US) Только для чтения Возвращает дату последнего изменения файла, на который ссылается объект File. File.name Только для чтения Возвращает имя файла, на который ссылается объект File. File.size (en-US) Только для чтения Возвращает размер файла. File.webkitRelativePath (en-US) Только для чтения Это API не было стандартизировано.

Читайте также:  Удаление сетевых адаптеров windows 10

Возвращает URL адрес, где расположен File . File.type (en-US) Только для чтения Возвращает MIME тип файла.

Методы

Интерфейс не определяет никаких методов, но наследует методы из интерфейса Blob :

Get the file type of a file using the Windows API

I am trying to identify when a file is PNG or JPG to apply it as a wallpaper. I am using the SHGetFileInfo to get the type name with the .szTypeName variable, but I just realized that it changes if the OS is in another language.

This is my code:

This is how I am validating:

When the OS is in spanish, the value changes to «Archivo JPG» so I would have to validate against all language, and does not make sense.

Any idea what other function I can use?

1 Answer 1

This API is meant to be used to produce a user-facing string representation for known file types 1) . It is not meant to be used to implement code logic.

More importantly, it doesn’t try to parse the file contents. It works off of the file extension alone. If you rename an Excel workbook MySpreadsheet.xlsx to MySpreadsheet.png, it will happily report, that this is a «PNG File».

The solution to your problem is simple: You don’t have to do anything, other than filtering on the file extension. Use PathFindExtension (or PathCchFindExtension for Windows 8 and above) to get the file extension from a fully qualified path name.

This can fail, in case the user appended the wrong file extension. Arguably, this isn’t something your application should fix, though.

As an aside, you pass SHGFI_USEFILEATTRIBUTES to SHGetFileInfoW but decided to not pass any file attributes (second argument) to the call. This is a bug. See What does SHGFI_USEFILEATTRIBUTES mean? for details.

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

Доброго времени суток, друзья!

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

Читайте также:  Установка urllib2 python windows

В этой статье мы создадим три небольших проекта:

  • Реализуем получение и обработку изображений, аудио, видео и текста в формате txt и pdf
  • Создадим генератор JSON-файлов
  • Напишем две программы: одна будет формировать вопросы (в формате JSON), а другая использовать их для создания теста

Если Вам это интересно, прошу следовать за мной.

Получаем и обрабатываем файлы

Для начала создадим директорию, в которой будут храниться наши проекты. Назовем ее «Work-With-Files-in-JavaScript» или как Вам будет угодно.

В этой директории создадим папку для первого проекта. Назовем ее «File-Reader».

Создаем в ней файл «index.html» следующего содержания:

Здесь мы имеем контейнер-файлоприемник и инпут с типом «file» (для получения файла; мы будем работать с одиночными файлами; для получения нескольких файлов инпуту следует добавить атрибут «multiple»), который будет спрятан под контейнером.

Стили можно подключить отдельным файлом или в теге «style» внутри head:

Можете сделать дизайн по своему вкусу.

Не забываем подключить скрипт либо в head с атрибутом «defer» (нам нужно дождаться отрисовки (рендеринга) DOM; можно, конечно, сделать это в скрипте через обработку события «load» или «DOMContentLoaded» объекта «window», но defer намного короче), либо перед закрывающим тегом «body» (тогда не нужен ни атрибут, ни обработчик). Лично я предпочитаю первый вариант.

Откроем index.html в браузере:

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

Нам часто придется обращаться к объектам «document» и «document.body», а также несколько раз выводить результаты в консоль, поэтому предлагаю обернуть наш код в такое IIFE (это не обязательно):

Первым делом объявляем переменные для файлоприемника, инпута и файла (последний не инициализируем, поскольку его значение зависит от способа передачи — через клик по инпуту или бросание (drop) в файлоприемник):

Отключаем обработку событий «dragover» и «drop» браузером:

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

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

Мы только что реализовали простейший механизм «dran’n’drop».

Обрабатываем клик по файлоприемнику (делегируем клик инпуту):

Приступаем к обработке файла:

Удаляем файлоприемник и инпут:

Читайте также:  Темы для windows 10 живые обои компы

Способ обработки файла зависит от его типа:

Мы не будем работать с html, css и js-файлами, поэтому запрещаем их обработку:

Мы также не будем работать с MS-файлами (имеющими MIME-тип «application/msword», «application/vnd.ms-excel» и т.д.), поскольку их невозможно обработать нативными средствами. Все способы обработки таких файлов, предлагаемые на StackOverflow и других ресурсах, сводятся либо к конвертации в другие форматы с помощью различных библиотек, либо к использованию viewer’ов от Google и Microsoft, которые не хотят работать с файловой системой и localhost. Вместе с тем, тип pdf-файлов также начинается с «application», поэтому такие файлы мы будем обрабатывать отдельно:

Для остальных файлов получаем их «групповой» тип:

Посредством switch..case определяем конкретную функцию обработки файла:

Функция обработки изображения:

Функция обработки аудио:

Функция обработки видео:

Функция обработки текста:

Last, but not least, функция обработки pdf-файлов:

Best way to get file type association in Windows 10 from command line?

I am aware that I can use assoc and ftype on the command line to get the file type assocation. So when i do:

I am under the impression that .html files are opened with iexplorer.

However html files are opening with chrome since chrome has been set as the default app for html files.

Why is ftype giving me iexplorer when indeed the program opens with chrome?

2 Answers 2

It seems that ftype and assoc are pretty useless on systems running Windows 8 or later.

This is due to the fact that Microsoft decided in Windows 8 that users should be able to set default programs only via the built in GUI. This probably was due to security reasons and trouble with applications hijacking file type associations.

Therefore a new registry key was introduced and Windows now writes the user choice to

The key contains a Prog-Id and a Hash Value. The correct Hash value proves that the UserChoice ProgId value was set by the user, and not by any other application. If the hash is invalid, windows will reset the user choice to the default application.

The ftype command however is not aware of the above registry key.

It reads the HKCR\htmlfile\shell\open\command\(Default) registry key and prints out the result.

Therefore the results of the ftype command therefore are not usuable to determine which application is associated with a specific file extension.

Оцените статью