This chapter is from the book

This chapter is from the book

Understanding File Types

To get the most out of this chapter, you need to understand some background about what a file type is and how Windows 8.1 determines and works with file types. The next couple of sections tell you everything you need to know to get you through the rest of the chapter.

File Types and File Extensions

One of the fictions that Microsoft has tried to foist on the computer-using public is that we live in a “document-centric” world. That is, that people care only about the documents they create and not about the applications they use to create those documents. This is actually not all that far from the truth if you only use the Windows 8.1 interface because Windows Store apps are designed to hide their interface elements, so you see only the document (whatever it might be) that’s currently onscreen.

However, for the rest of us who spend the majority of our time in the Desktop app, this notion of a document-focused computing world is pure hokum. The reality is that applications are still too difficult to use and the capability to share documents between applications is still too problematic. In other words, you can’t create documents unless you learn the ins and outs of an application, and you can’t share documents with others unless you use compatible applications.

Unfortunately, we’re stuck with Microsoft’s worship of the document and all the problems that this worship creates. A good example is the hiding of file extensions. As you learn in Chapter 24, “Tweaking and Customizing Windows,” Windows 8.1 hides file extensions by default, and this creates a whole host of problems, from the confusion of trying to determine a file type based on a teensy icon, to not being able to edit extensions, to not being able to save a file under an extension of your choice. You can overcome all these problems by turning on file extensions, as we show later.

To learn how to activate file extensions, see “Turning On File Extensions,” p. 571.

Why does the lack of file extensions cause such a fuss? Because file extensions determine the file type of a document. In other words, if Windows 8.1 sees that a file has a .txt extension, it concludes the file uses the Text Document file type. Similarly, a file with the extension .bmp uses the Bitmap Image file type.

The file type, in turn, determines the application that’s associated with the extension. If a file has a .txt extension, Windows 8.1 associates that extension with Notepad, so the file will always open in Notepad. Nothing else inherent in the file determines the file type; therefore, at least from the point of view of the user, the entire Windows 8.1 file system rests on the scrawny shoulders of the humble file extension.

This method of determining file types is, no doubt, a poor design decision. For example, there is some danger that a novice user could render a file useless by imprudently renaming its extension. Interestingly, Microsoft seems to have recognized this danger and programmed a subtle behavior change into recent versions of Windows (Windows Vista and later): when file extensions are turned on and you activate the Rename command (click the file and then press F2), Windows displays the usual text box around the entire filename, but it selects only the file’s primary name (the part to the left of the dot), as shown in Figure 6.1. Pressing any character obliterates the primary name but leaves the extension intact.

Figure 6.1 When you activate the Rename command with file extensions turned on, Windows selects just the file’s primary name.

Despite the drawbacks that come with file extensions, they lead to some powerful methods for manipulating and controlling the Windows 8.1 file system, as you see in the rest of this chapter.

File Types and the Registry

As you might expect, everything Windows 8.1 knows about file types is defined in the Registry. (See Chapter 29, “Editing the Windows Registry,” for the details on understanding and using the Registry.) Open the Registry Editor (in the Start screen, type regedit, press Enter, and enter your UAC credentials) and examine the HKEY_CLASSES_ROOT key. Notice that it’s divided into two sections:

NOTE

HKEY_CLASSES_ROOT also stores information on ActiveX controls in its CLSID subkey. Many of these controls also have corresponding subkeys in the second half of HKEY_CLASSES_ROOT.

The first part of HKEY_CLASSES_ROOT consists of dozens of file extension subkeys (such as .bmp and .txt). There are well over 400 such subkeys in a basic Windows 8.1 installation, and there could easily be two or three times that number on a system with many applications installed.

The second part of HKEY_CLASSES_ROOT lists the various file types associated with the registered extensions. When an extension is associated with a particular file type, the extension is said to be registered with Windows 8.1.

To see what this all means, take a look at Figure 6.2. Here, we’ve selected the .txt key, which has txtfile as its Default value.

Figure 6.2 The first part of the HKEY_CLASSES_ROOT key contains subkeys for all the registered file extensions.

That Default value is a pointer to the extension’s associated file type subkey in the second half of HKEY_CLASSES_ROOT. Figure 6.3 shows the txtfile subkey associated with the .txt extension. Here are some notes about this file type subkey:

The Default value is a description of the file type (Text Document, in this case).

The DefaultIcon subkey defines the icon that’s displayed with any file that uses this type.

NOTE

The %1 at the end of the command is a placeholder that refers to the document being opened (if any). If you double-click a file named memo.txt, for example, the %1 placeholder is replaced by memo.txt, which tells Windows to run Notepad and open that file.

The shell subkey determines the actions that can be performed with this file type. These actions vary depending on the file type, but Open and Print are common. The Open action determines the application that’s associated with the file type. For example, the Open action for a Text Document file type is the following:

%SystemRoot%\system32\NOTEPAD.EXE %1

Figure 6.3 The second part of HKEY_CLASSES_ROOT contains the file type data associated with each extension.