# Bestand (computer)

Een elektronisch bestand (computerbestand), kortweg bestand (Engels: file) is een geordende verzameling van gegevens in elektronische vorm, die door het elektronische apparaat (computer, smartphone, digitale videorecorder en dergelijke) onder één naam kan worden behandeld en aangesproken.
Het soort gegevens (bijvoorbeeld tekst, rekenblad, afbeelding, audio, video, computerprogramma) en de wijze waarop het bestand is geordend is bij wijze van conventie vaak, zowel voor de mens als voor applicaties, deels te herkennen aan de uitgang van de naam van het bestand. Met behulp van het juiste computerprogramma (de juiste software) kan een bestand worden gelezen of bewerkt. Om een bestand na het uitzetten van het elektronische apparaat niet kwijt te raken dient het te worden opgeslagen in een niet-vluchtig geheugen. Dat kan lokaal op een harde schijf, een flashgeheugen (vaak uitneembaar: geheugenstaaf of geheugenkaart), een cd-rom, een dvd zijn, of op een locatie waarmee de computer via een netwerk in verbinding staat.
De locatie van een computerbestand op een lokale computer (het pad) is bijvoorbeeld C:\familie\brief aan oom Frits 20190129.doc.

## Bewerkingen

Bewerkingen op bestanden bestaan vooral uit het lezen van en het schrijven naar een bestand. Daarnaast kunnen bestanden worden aangemaakt (aanvankelijk met lengte nul) en worden gewist. De gebruiker kent bestanden vooral als 'zijn gegevens', de brief die hij heeft geschreven, de inhoud van zijn elektronische kaartenbak, zijn spreadsheet, de foto die zij maakte van haar kinderen; maar nagenoeg alle gegevens die de computer nodig heeft of kan verwerken zijn als bestanden op de harde schijf aanwezig, ook de programma's.
De namen van bewerkingen zijn vaak gebaseerd op handelingen die vroeger gepaard gingen met het positioneren van een lees-/schrijfkop op een rol magnetische band. We onderscheiden onder andere:
* aanmaken (create);
* openen (open);
* sluiten (close);
* wissen (delete of unlink);
* positioneren (seek);
* samenvoegen (merge);
* verlengen (append): gegevens achteraan het bestand bijschrijven;
* lezen (read);
* schrijven (write);
* flushen (flush): naar schijf of band schrijven van de in de schrijfbuffer aanwezige gegevens.
Deze bewerkingen bestaan vooral uit lezen van het bestand en schrijven naar het bestand, waarbij de bewerking plaatsvindt bij het op dat moment geldende adres (de offset), waarnaar door de impliciete file pointer verwezen wordt. Deze file pointer blijft na de bewerking aan het eind van de gelezen of geschreven data staan. Lezen is non-destructief, maar bij schrijven wordt de eerdere inhoud op die plaats overschreven, of het bestand wordt langer, bij merge en append.
Daarnaast kunnen bestanden worden aangemaakt (aanvankelijk met lengte nul) en worden gewist. Voor lezen of schrijven moet het bestand eerst worden geopend, waarbij het besturingssysteem aan het programma een file handle (een getal) teruggeeft die bij het aanvragen van verdere bewerkingen moet worden opgegeven. Bestandsbewerkingen worden normaliter door het besturingssysteem afgehandeld naar aanleiding van functieaanroepen van het programma. Dit gebeurt via een deel van het besturingssysteem dat het bestandssysteem heet. Na het openen staat de file pointer (de offset vanaf het begin) meestal op nul, maar bij aanvullen (append) staat deze aan het eind van het bestand. Er kan een file seek worden gedaan waarmee de file pointer op een bepaalde waarde wordt gezet. Een bestand dat klaar is, moet ook weer worden gesloten. De meeste van deze bewerkingen zijn voor de gebruiker tegenwoordig niet meer zichtbaar.
Bestanden zijn geschikt om snel grote hoeveelheden gegevens in een bepaalde volgorde weg te schrijven en in diezelfde volgorde ook weer snel te lezen. Ze zijn niet erg geschikt voor gegevens die voortdurend in andere volgordes moeten worden opgeroepen. Het lezen van de volgende byte kost een minimale hoeveelheid tijd, maar het lezen van de vorige byte kost doorgaans een heleboel tijd. Dit omdat er dan eerst een seek moet worden gedaan. In de tijd van de magneetband betekende dat: band stilzetten, terugspoelen naar het begin, zoekend vooruitspoelen tot de vorige plaats minus 1, en lezen. Zie b.v. ook de datatypen stack, queue en array. Ook bij het lezen van de harde schijf is het sequentieel lezen van een bestand nog steeds honderden malen efficiënter dan alle data in willekeurige volgorde door middel van random access te lezen.

## Organisatie

Bestanden worden meestal georganiseerd in directory's (ook wel mappen of folders genaamd). Deze kunnen beschouwd worden als bestanden met als inhoud de namen van een aantal bestanden en verwijzingen naar deze bestanden. Een verzameling van directory's op een bepaald medium of op een systeem wordt een bestandssysteem genoemd.

## Types

Er zijn verschillende soorten bestanden, ook wel bestandstypes genoemd. Deze indeling naar bestandstype is in principe gebaseerd op de inhoud van een bestand. Op Microsoft Windows systemen kan men het bestandstype herkennen aan de bestandsextensie (meestal de laatste 3 tekens van de bestandsnaam). Bij OSX van Apple is de bestandsextensie naast de naam van het bestand gezet, indien dat niet het geval is staat de bestandsextensie in de gedetailleerde informatie over het bestand. Dit is overigens alleen een conventie, een bestand kan een andere extensie hebben dan bij zijn inhoud past. Op systemen die op UNIX zijn gebaseerd (zoals Linux en de Berkeley Software Distribution (BSD)) hebben bestandsnamen niet altijd een extensie en kan men het "file" commando gebruiken om het bestandstype te weten te komen. Ook bestaan er op zulke systemen weer andere typen bestanden, zoals de dot-bestanden.
Bestanden kunnen soms ook herkend worden aan een zogenaamd 'magic number', een afgesproken sequentie van karakters aan het begin van een bestand. Het hiervoor genoemde UNIX commando file maakt hier ook gebruik van. Omdat magic numbers voor gebruikers onzichtbaar zijn worden er nogal eens vrij typische constructies gebruikt. Een aantal voorbeelden:
* Een Java class file begint met het 0xCAFEBABE (hexadecimaal).
* Een Windows executable (het PE formaat) begint met de ASCII string MZ, de initialen van de ontwerper van het formaat, Mark Zbikowski.
Een andere indeling naar type kan worden gemaakt op grond van de manier waarop een bestand benaderd kan worden. Hierbij kunnen sequentiële en geïndexeerde bestanden worden onderscheiden. In een geïndexeerd bestand kan op basis van een sleutel direct een bepaald gedeelte van het bestand gelezen worden. Een voorbeeld hiervan is een VSAM-bestand.