C# Language
Fil och ström I / O
Sök…
Introduktion
Hanterar filer.
Syntax
-
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)
parametrar
Parameter | detaljer |
---|---|
väg | Plats för filen. |
bifoga | Om filen finns, kommer true att lägga till data i slutet av filen (bifoga), falskt kommer att skriva över filen. |
text | Text som ska skrivas eller lagras. |
innehåll | En samling strängar som ska skrivas. |
källa | Platsen för filen du vill använda. |
dest | Platsen du vill att en fil ska gå till. |
Anmärkningar
- Se alltid till att stänga
Stream
objekt. Detta kan göras med ettusing
som visas ovan eller genom att manuellt ringamyStream.Close()
. - Se till att den aktuella användaren har nödvändiga behörigheter på den sökväg du försöker skapa filen.
- Verbatim strängar bör användas när du deklarerar en söksträng som innehåller backstänger, så:
@"C:\MyFolder\MyFile.txt"
Läser från en fil med klassen System.IO.File
Du kan använda System.IO.File.ReadAllText- funktionen för att läsa hela innehållet i en fil i en sträng.
string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");
Du kan också läsa en fil som en rad rader med funktionen System.IO.File.ReadAllLines :
string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");
Skriva rader till en fil med klassen System.IO.StreamWriter
System.IO.StreamWriter- klassen:
Implementerar en TextWriter för att skriva tecken till en ström i en viss kodning.
Med hjälp av WriteLine
metoden kan du skriva innehåll rad för rad till en fil.
Lägg märke till användningen av det using
nyckelordet som ser till att StreamWriter-objektet kastas så snart det går ut ur räckvidden och att filen därför stängs.
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);
}
}
Observera att StreamWriter kan ta emot en andra bool
parameter i sin konstruktör, vilket gör det möjligt att Append
till en fil istället för att skriva över filen:
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");
}
Skriva till en fil med klassen System.IO.File
Du kan använda funktionen System.IO.File.WriteAllText för att skriva en sträng till en fil.
string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);
Du kan också använda funktionen System.IO.File.WriteAllLines som får en IEnumerable<String>
som den andra parametern (i motsats till en enda sträng i föregående exempel). Detta låter dig skriva innehåll från en rad rader.
string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);
Lazily läser en fil rad för rad via en IEnumerable
När du arbetar med stora filer kan du använda metoden System.IO.File.ReadLines
för att läsa alla rader från en fil till en IEnumerable<string>
. Detta liknar System.IO.File.ReadAllLines
, förutom att det inte laddar hela filen i minnet på en gång, vilket gör den mer effektiv när du arbetar med stora filer.
IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);
Den andra parametern för File.ReadLines är valfri. Du kan använda den när det krävs för att ange kodning.
Det är viktigt att notera att att ringa ToArray
, ToList
eller en annan liknande funktion kommer att tvinga alla rader som ska laddas samtidigt, vilket innebär att fördelen med att använda ReadLines
är ogiltig. Det är bäst att räkna över IEnumerable
hjälp av en foreach
eller LINQ om du använder den här metoden.
Skapa fil
Fil statisk klass
Genom att använda Create
metod för klassen File
static kan vi skapa filer. Metod skapar filen på den givna banan, samtidigt öppnar den filen och ger oss FileStream
för filen. Se till att du stänger filen när du är klar med den.
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();
FileStream klass
Det finns många överbelastningar av denna klasskonstruktör som faktiskt är väl dokumenterad här . Nedanstående exempel är den som täcker de mest använda funktionaliteterna i denna klass.
var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
Du kan kontrollera händelserna för FileMode , FileAccess och FileShare från dessa länkar. Vad de egentligen betyder är följande:
FileMode: Svar "Bör fil skapas? Öppnas? Skapa om inte finns, öppna?" kinda frågor.
FileAccess: Svar "Ska jag kunna läsa filen, skriva till filen eller båda?" kinda frågor.
FileShare: Svar "Bör andra användare kunna läsa, skriva etc. till filen medan jag använder den samtidigt?" kinda frågor.
Kopiera fil
Fil statisk klass
File
statisk klass lätt kan användas för detta ändamål.
File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Anmärkning: Med den här metoden kopieras filen, vilket betyder att den kommer att läsas från källan och sedan skrivas till destinationsvägen. Det här är en resurskrävande process, det tar relativt tid till filstorleken och kan leda till att ditt program fryser om du inte använder trådar.
Flytta fil
Fil statisk klass
Statisk klass för filer kan enkelt användas för detta ändamål.
File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Anmärkning1: Ändrar endast filens index (om filen flyttas i samma volym). Denna åtgärd tar inte relativ tid till filstorleken.
Anmärkning2: Det går inte att åsidosätta en befintlig fil på destinationsvägen.
Radera fil
string path = @"c:\path\to\file.txt";
File.Delete(path);
Medan Delete
inte kastar undantag om filen inte finns, kommer den att kasta undantag, t.ex. om den angivna sökvägen är ogiltig eller den som ringer inte har de behörigheter som krävs. Du bör alltid radera samtal för att ta Delete
inne i try-catch-blocket och hantera alla förväntade undantag. Om det är möjligt med tävlingsförhållanden, ska du logga in den inuti låsmeddelandet .
Filer och kataloger
Hämta alla filer i katalogen
var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);
Returnerar en matris med FileInfo
representerar alla filer i den angivna katalogen.
Hämta filer med specifikt förlängning
var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);
Returnerar en matris med FileInfo
, som representerar alla filer i den angivna katalogen med det angivna tillägget.
Async skriver text till en fil med 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);
}