Sök…
Använda strömmar
En ström är ett objekt som tillhandahåller ett medel på låg nivå för att överföra data. De fungerar inte som datahållare.
Data som vi hanterar är i form av byte array ( byte []
). Funktionerna för att läsa och skriva är alla byteorienterade, t.ex. WriteByte()
.
Det finns inga funktioner för att hantera heltal, strängar osv. Detta gör att strömmen är mycket allmänt, men mindre enkel att arbeta med om du bara vill överföra text. Strömmar kan vara särskilt användbara när du har att göra med stora mängder data.
Vi kommer att behöva använda olika typer av Stream baserat där det måste skrivas / läsas från (dvs. stödbutiken). Om källan till exempel är en fil, måste vi använda FileStream
:
string filePath = @"c:\Users\exampleuser\Documents\userinputlog.txt";
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
// do stuff here...
fs.Close();
}
På liknande sätt används MemoryStream
om säkerhetslagret är minne:
// Read all bytes in from a file on the disk.
byte[] file = File.ReadAllBytes(“C:\\file.txt”);
// Create a memory stream from those bytes.
using (MemoryStream memory = new MemoryStream(file))
{
// do stuff here...
}
På liknande sätt används System.Net.Sockets.NetworkStream
för nätverksåtkomst.
Alla strömmar härrör från den generiska klassen System.IO.Stream
. Data kan inte läsas eller skrivas direkt från strömmar. .NET Framework tillhandahåller hjälpklasser som StreamReader
, StreamWriter
, BinaryReader
och BinaryWriter
som konverterar mellan ursprungliga typer och lågnivåströmgränssnittet och överför data till eller från strömmen för dig.
Läsning och skrivning till strömmar kan göras via StreamReader
och StreamWriter
. Man bör vara försiktig när man stänger dessa. Som standard stänger också stängd ström och gör den oanvändbar för vidare användning. Detta standardbeteende kan ändras genom att använda en konstruktör som har bool leaveOpen
parameter och ställer in dess värde som true
.
StreamWriter
:
FileStream fs = new FileStream("sample.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
string NextLine = "This is the appended line.";
sw.Write(NextLine);
sw.Close();
//fs.Close(); There is no need to close fs. Closing sw will also close the stream it contains.
StreamReader
:
using (var ms = new MemoryStream())
{
StreamWriter sw = new StreamWriter(ms);
sw.Write(123);
//sw.Close(); This will close ms and when we try to use ms later it will cause an exception
sw.Flush(); //You can send the remaining data to stream. Closing will do this automatically
// We need to set the position to 0 in order to read
// from the beginning.
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
var myStr = sr.ReadToEnd();
sr.Close();
ms.Close();
}
Eftersom Classes Stream
, StreamReader
, StreamWriter
, etc. implementerar IDisposable
gränssnittet, kan vi kalla metoden Dispose()
på objekt i dessa klasser.