C# Language
Bestands- en stream-I / O
Zoeken…
Invoering
Beheert bestanden.
Syntaxis
-
new System.IO.StreamWriter(string path)
-
new System.IO.StreamWriter(string path, bool append)
-
System.IO.StreamWriter.WriteLine(string text)
-
System.IO.StreamWriter.WriteAsync(string text)
-
System.IO.Stream.Close()
-
System.IO.File.ReadAllText(string path)
-
System.IO.File.ReadAllLines(string path)
-
System.IO.File.ReadLines(string path)
-
System.IO.File.WriteAllText(string path, string text)
-
System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
-
System.IO.File.Copy(string source, string dest)
-
System.IO.File.Create(string path)
-
System.IO.File.Delete(string path)
-
System.IO.File.Move(string source, string dest)
-
System.IO.Directory.GetFiles(string path)
parameters
Parameter | Details |
---|---|
pad | De locatie van het bestand. |
append | Als het bestand bestaat, voegt true gegevens toe aan het einde van het bestand (toevoegen), en false overschrijft het bestand. |
tekst | Tekst om te schrijven of op te slaan. |
inhoud | Een verzameling te schrijven strings. |
bron | De locatie van het bestand dat u wilt gebruiken. |
dest | De locatie waar u een bestand naartoe wilt. |
Opmerkingen
- Zorg er altijd voor dat
Stream
objecten worden gesloten. Dit kan gedaan worden met eenusing
zoals hierboven getoond of door handmatigmyStream.Close()
roepen. - Zorg ervoor dat de huidige gebruiker de benodigde machtigingen heeft voor het pad dat u probeert het bestand te maken.
- Woordelijke tekenreeksen moeten worden gebruikt bij het declareren van een
@"C:\MyFolder\MyFile.txt"
die backslashes bevat, zoals:@"C:\MyFolder\MyFile.txt"
Lezen van een bestand met behulp van de klasse System.IO.File
U kunt de functie System.IO.File.ReadAllText gebruiken om de volledige inhoud van een bestand in een tekenreeks te lezen.
string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");
U kunt een bestand ook als een reeks regels lezen met de functie System.IO.File.ReadAllLines :
string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");
Lijnen naar een bestand schrijven met de klasse System.IO.StreamWriter
De klasse System.IO.StreamWriter :
Implementeert een TextWriter voor het schrijven van tekens naar een stream in een bepaalde codering.
Met de WriteLine
methode kunt u inhoud regel voor regel naar een bestand schrijven.
Let op het gebruik van het sleutelwoord using
dat ervoor zorgt dat het StreamWriter-object wordt verwijderd zodra het buiten het bereik valt en dus het bestand wordt gesloten.
string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
foreach (string line in lines)
{
sw.WriteLine(line);
}
}
Merk op dat de StreamWriter een tweede kan ontvangen bool
parameter in zijn bouwer, het mogelijk maakt om Append
naar een bestand in plaats van het overschrijven van het bestand:
bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
sw.WriteLine("This line will be appended to the existing file");
}
Schrijven naar een bestand met de klasse System.IO.File
U kunt de functie System.IO.File.WriteAllText gebruiken om een tekenreeks naar een bestand te schrijven.
string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);
U kunt ook de functie System.IO.File.WriteAllLines gebruiken die als tweede parameter een IEnumerable<String>
ontvangt (in tegenstelling tot een enkele string in het vorige voorbeeld). Hiermee kunt u inhoud schrijven uit een reeks regels.
string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);
Lui een bestand regel voor regel lezen via een IEnumerable
Wanneer u met grote bestanden werkt, kunt u de methode System.IO.File.ReadLines
gebruiken om alle regels van een bestand in een IEnumerable<string>
. Dit is vergelijkbaar met System.IO.File.ReadAllLines
, behalve dat het niet het hele bestand in één keer in het geheugen laadt, waardoor het efficiënter wordt bij het werken met grote bestanden.
IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);
De tweede parameter van File.ReadLines is optioneel. U kunt het gebruiken wanneer het nodig is om codering op te geven.
Het is belangrijk op te merken dat het aanroepen van ToArray
, ToList
of een andere soortgelijke functie ervoor zorgt dat alle regels tegelijk worden geladen, wat betekent dat het voordeel van het gebruik van ReadLines
teniet wordt gedaan. Het is het beste om over de IEnumerable
met behulp van een foreach
lus of LINQ als u deze methode gebruikt.
Maak bestand
Statische bestandsklasse
Door de methode Create
van de statische File
, kunnen we bestanden maken. Methode maakt het bestand op het opgegeven pad, tegelijkertijd opent het het bestand en geeft ons de FileStream
van het bestand. Zorg ervoor dat u het bestand sluit nadat u klaar bent.
EX1:
var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();
EX2:
using(var fileStream1 = File.Create("samplePath"))
{
/// you can write to the fileStream1
}
EX3:
File.Create("samplePath").Close();
Klasse FileStream
Er zijn veel overbelastingen van deze klassenbouwer die hier goed is gedocumenteerd. Onderstaand voorbeeld is voor degene die de meest gebruikte functionaliteiten van deze klasse behandelt.
var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
U kunt de enums voor FileMode , FileAccess en FileShare controleren via die koppelingen. Wat ze in feite bedoelen zijn als volgt:
FileMode: Antwoorden "Moet het bestand worden gemaakt? Geopend? Maken als het niet bestaat, dan openen?" nogal vragen.
FileAccess: Antwoorden "Moet ik het bestand kunnen lezen, naar het bestand kunnen schrijven of beide?" nogal vragen.
FileShare: Antwoorden "Moeten andere gebruikers het bestand kunnen lezen, schrijven enz. Terwijl ik het tegelijkertijd gebruik?" nogal vragen.
Kopieer bestand
Statische bestandsklasse
Statische File
kan eenvoudig voor dit doel worden gebruikt.
File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Opmerking: Op deze manier wordt het bestand gekopieerd, wat betekent dat het uit de bron wordt gelezen en vervolgens naar het doelpad wordt geschreven. Dit is een bronverslindend proces, het kost relatief veel tijd om de bestandsgrootte en kan ervoor zorgen dat uw programma vastloopt als u geen threads gebruikt.
Bestand verplaatsen
Statische bestandsklasse
Statische bestandsklasse kan eenvoudig voor dit doel worden gebruikt.
File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Opmerking1: Verandert alleen de index van het bestand (als het bestand in hetzelfde volume wordt verplaatst). Deze bewerking duurt niet relatief lang aan de bestandsgrootte.
Opmerking2: kan een bestaand bestand op het doelpad niet overschrijven.
Verwijder bestand
string path = @"c:\path\to\file.txt";
File.Delete(path);
Hoewel Delete
geen uitzondering genereert als het bestand niet bestaat, wordt een uitzondering gegenereerd, bijvoorbeeld als het opgegeven pad ongeldig is of de beller niet de vereiste machtigingen heeft. U moet altijd oproepen naar Delete
in het try-catch-blok wikkelen en alle verwachte uitzonderingen verwerken. Wikkel logica in slotverklaring in het geval van mogelijke raceomstandigheden.
Bestanden en mappen
Download alle bestanden in de directory
var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);
Retourneert een array van FileInfo
, die alle bestanden in de opgegeven map vertegenwoordigt.
Download bestanden met specifieke extensie
var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);
Retourneert een array van FileInfo
, die alle bestanden in de opgegeven map met de opgegeven extensie vertegenwoordigt.
Async schrijft tekst naar een bestand met StreamWriter
// filename is a string with the full path
// true is to append
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
// Can write either a string or char array
await file.WriteAsync(text);
}