Un fichier informatique est une unité informationnelle physiquement stockée sur un support de mémoire de masse permanent (disque dur par exemple). Un fichier a généralement comme attributs : un nom ; un chemin d'accès ; une taille mesurée en octets ; une date de création et une de dernière modification. Plusieurs systèmes de fichiers multi-utilisateur rattachent aussi à chaque fichier un propriétaire et des droits d'accès. Enfin, chaque fichier a un contenu, soit une suite ordonnée d'octets, qui peut représenter n'importe quelle donnée binaire déterministe : un programme informatique, un document, un texte, etc.
Deux fichiers sont égaux s'ils ont la même taille, et les mêmes octets dans le même ordre. Comparer tous les octets de deux fichiers potentiellement identiques est malheureusement une opération longue (proportionnelle à la taille du fichier). Elle n'est pas non plus toujours possible, comme dans le cas du transport d'un fichier d'un point à un autre que ce soit via un support physique ou par le réseau.
Différentes méthodes sont utilisées pour vérifier l'intégrité d'un fichier :
Voir Intégrité (cryptographie)
Par ailleurs, un fichier peut être chiffré, ou compressé.
On distingue habituellement les fichiers contenant des informations à l'usage exclusif du système de fichiers (appelés fichiers spéciaux) des autres fichiers (parfois appelés fichiers régulaires). Parmi les fichiers spéciaux on compte :
Les fichiers régulaires peuvent être divisés en fichiers texte et fichiers binaires. Les premiers ont un contenu pouvant être interprété comme du texte, la plupart du temps en codage ASCII ou une extension de ASCII (UTF-8 ou extension régionale). Des fichiers UTF-16 existent également.
Quelques exemples de fichiers textes :
Le contenu d'un fichier binaire n'est pas du texte et correspond souvent à un format précis. Voici quelques exemples de formats binaires usuels :
Pour déterminer le type d'un fichier, sous Unix et ses dérivés (Linux) ou avec Cygwin sous Windows, la commande
file
peut être utilisée.
Les données dans les fichiers peuvent être en
Le système d'exploitation du Macintosh utilisait un format de fichier évolué (supporté par HFS et HFS+) qui tend à disparaître à partir de la dixième version. Ce format, outre une certaine quantité de métadonnées, prévoit deux formes de données : la branche des données (data fork), correspondant au fichier de n'importe quel système d'exploitation, et la branche des ressources (resource fork), sorte de répertoire contenant des plus petites unités de données appelées ressources, classées par leur type. L'avantage par rapport au fichier monolithique ordinaire est double : premièrement, l'application peut utiliser une API du système (Boîte à outils Macintosh) pour gérer les données en mémoire ; deuxièmement, l'utilisateur voit un simple fichier qu'il nomme document alors qu'il contient des données hétérogènes, à la manière d'un répertoire. Le tout est évolutif puisqu'on peut toujours ajouter des nouveaux types de ressources sans modifier le format original du fichier. À partir de Mac OS X la notion de bundle (document qui est, en fait, un répertoire), reprend les avantages principaux de la branche des ressources. Un document n'est donc plus forcément un fichier.
Afin de repérer le format interne d'un fichier, et donc de choisir le logiciel permettant d'exploiter son contenu, il est d'usage de lui donner un suffixe de fichier, souvent désigné par le terme extension. Il s'agit simplement d'un ensemble de caractères conventionnels identifiant un format de document et placé àaprès un point à la fin du nom du fichier. Dans certains cas il est possibles d'enchainer plusieurs suffixes de fichier.
Par exemple : mozilla-i686-pc-linux-gnu-1.5-sea.tar.gz
Par contre, malgré le point .5-sea n'est pas ici un suffixe véritable. On doit en fait comprendre :
sea indique une archive auto-extractible (self extractible archive), un fichier qui en s'exécutant lui-même, extrait son contenu dans un répertoire (folder).
Les systèmes d'exploitation permettent aux utilisateurs, ainsi qu'aux développeurs de logiciels, d'accéder à un fichier dans un système de fichiers grâce à une norme de nommage et le manipuler conformément à une API.
L'API de base inaugurée par UNIX considère les fichiers comme plats, sans structure et ne gère pas le tamponnage niveau utilisateur. L'API de base ne permet guère plus que de définir une position courante, de lire ou écrire. On peut aussi tronquer ou étendre un fichier. À ce niveau un fichier n'est donc qu'une séquence d'octets.
C'est le rôle d'API de plus haut niveau que de se spécialiser pour différents types de fichiers. La simplification de l'API permet de considérer comme fichiers des entités qui n'appartiennent pas nécessairement à un système de fichiers (canaux d'entrées sortie, mémoire vive) et de manipuler ces entités de manière homogène.
Cela est à contraster avec des systèmes de générations précédentes avec des API spécialisées pour chaque composant physique ou imposant des structures aux fichiers sur disque (adressage séquentiel indexé par exemple)
Exemple :
Une fois le fichier désigné, on peut le soumettre à un logiciel, afin qu'il le manipule. Certains outils sont destinés à gérer l'emplacement des fichiers (déplacement, nommage, copie), d'autres gèrent le contenu des fichiers afin que l'utilisateur puisse les modifier ou simplement les consulter.