
FileStream C# (Wie es für Entwickler funktioniert)
Dieser Artikel konzentriert sich auf die FileStream-Klasse in C# und wie sie Ihnen hilft, Lese- und Schreiboperationen an Dateien durchzuführen. Wir werden praktische Beispiele untersuchen, verstehen, wie FileStream im Kern funktioniert, und lernen, wie man Datei-Daten effizient verwaltet. Dieser Leitfaden richtet sich an diejenigen, die neu im Umgang mit Dateien in C# sind, daher bleibt die Sprache anfängerfreundlich, während detaillierte Anweisungen zur Arbeit mit Dateien in C# und eine Einführung in die IronPDF-Bibliothek bereitgestellt werden.
Was ist FileStream?
Die FileStream-Klasse in C# bietet eine Möglichkeit, Dateien mit Bytes zu bearbeiten. Sie arbeitet mit Lese- und Schreiboperationen an Dateien und ermöglicht es Ihnen, direkt mit dem Dateiinhalt zu interagieren. Dies ist besonders nützlich beim Arbeiten mit Dateien für Eingabe-/Ausgabeaufgaben, insbesondere bei der Manipulation von Byte-Arrays.
Anwendungsfälle von FileStream
FileStream ist ideal für:
- Direktes Lesen und Schreiben von Binärdaten aus Dateien oder in Dateien.
- Effizientes Arbeiten mit großen Dateien.
- Durchführen von asynchronen Dateioperationen.
- Verwalten von Systemressourcen durch effiziente Speichernutzung.
Basisches Beispiel
Hier ist ein einfaches Beispiel, um eine Datei zu öffnen, Daten zu schreiben und sie dann mit FileStream zu lesen:
using System;
using System.IO;
public class Example
{
public static void Main()
{
string path = "example.txt";
// Creating a FileStream object to handle the file. The file handle is acquired here.
using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, FileStream!");
// Write data to file
fileStream.Write(data, 0, data.Length);
}
// Read from the file
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[1024];
int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
string text = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine(text);
}
}
}Imports System
Imports System.IO
Public Class Example
Public Shared Sub Main()
Dim path As String = "example.txt"
' Creating a FileStream object to handle the file. The file handle is acquired here.
Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
Dim data As Byte() = System.Text.Encoding.UTF8.GetBytes("Hello, FileStream!")
' Write data to file
fileStream.Write(data, 0, data.Length)
End Using
' Read from the file
Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
Dim buffer As Byte() = New Byte(1023) {}
Dim bytesRead As Integer = fileStream.Read(buffer, 0, buffer.Length)
Dim text As String = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead)
Console.WriteLine(text)
End Using
End Sub
End ClassDieses Beispiel zeigt die Erstellung eines FileStream-Objekts zur Bearbeitung von Lese- und Schreiboperationen an Dateien. Die FileStream-Klasse liest und schreibt Bytes direkt und ist somit geeignet für die Bearbeitung großer Dateien oder Binärdaten. Wir haben Encoding verwendet, um zwischen Text und Bytes zu konvertieren.
Daten schreiben mit FileStream
Um Daten in eine Datei zu schreiben, verwenden Sie die Write-Methode. Hier ist ein Beispiel, das erklärt, wie es im Detail funktioniert:
using System;
using System.IO;
public class FileWriteExample
{
public static void Main()
{
string path = "output.txt";
// Creating a FileStream object to write data to the file
using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("Writing data to FileStream.");
int offset = 0;
int count = buffer.Length;
// Writing data to the file
fileStream.Write(buffer, offset, count);
}
}
}Imports System
Imports System.IO
Public Class FileWriteExample
Public Shared Sub Main()
Dim path As String = "output.txt"
' Creating a FileStream object to write data to the file
Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes("Writing data to FileStream.")
Dim offset As Integer = 0
Dim count As Integer = buffer.Length
' Writing data to the file
fileStream.Write(buffer, offset, count)
End Using
End Sub
End ClassIn diesem Code wandeln wir einen String in ein Byte-Array mit UTF8-Kodierung um. Die Write-Methode schreibt das Byte-Array in die Datei ab der aktuellen Position (bestimmt durch den Offset) und schreibt die angegebene Anzahl von Bytes.
- FileMode.Create erstellt eine neue Datei und überschreibt alle vorhandenen Dateien mit demselben Namen.
- FileAccess.Write erteilt Schreibberechtigungen an den FileStream.
Lesen von Daten mit FileStream
Lassen Sie uns nun erkunden, wie man Daten aus einer Datei mit FileStream liest.
using System;
using System.IO;
public class FileReadExample
{
public static void Main()
{
// File path
string path = "output.txt";
// File Stream Object
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[1024];
int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
// Output Stream
string output = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine(output);
}
}
}Imports System
Imports System.IO
Public Class FileReadExample
Public Shared Sub Main()
' File path
Dim path As String = "output.txt"
' File Stream Object
Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
Dim buffer(1023) As Byte
Dim bytesRead As Integer = fileStream.Read(buffer, 0, buffer.Length)
' Output Stream
Dim output As String = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead)
Console.WriteLine(output)
End Using
End Sub
End ClassIn diesem Beispiel:
- FileMode.Open öffnet eine vorhandene Datei.
- Die Read-Methode liest eine angegebene Anzahl von Bytes (basierend auf der Puffergröße) und speichert sie im Byte-Array-Puffer.
- Wir verwenden
Encoding.UTF8.GetString, um die Byte-Daten zurück in einen String zu konvertieren.
Verwaltung des Dateizugriffs mit FileStream
Die FileStream-Klasse steuert den Zugriff auf Dateien, wodurch eine fein abgestimmte Handhabung von Datei-Händeln und Systemressourcen ermöglicht wird. Bei Verwendung von FileStream ist es wichtig sicherzustellen, dass der Stream nach der Verwendung ordnungsgemäß verworfen wird, entweder durch einen manuellen Aufruf von Close() oder durch die Verwendung der using-Anweisung, die den Stream automatisch entsorgt.
Behandlung der Dateiposition
Jedes Mal, wenn Sie in eine Datei lesen oder schreiben, verfolgt FileStream die aktuelle Position innerhalb der Datei. Sie können diese Position mit der Position-Eigenschaft abrufen:
fileStream.Position = 0; // Move to the beginning of the filefileStream.Position = 0 ' Move to the beginning of the fileVerwendung von FileStream für asynchrone Operationen
FileStream kann für asynchrone Lese- und Schreiboperationen verwendet werden und verbessert die Leistung, indem andere Prozesse ausgeführt werden können, während die Dateioperationen durchgeführt werden. Hier ist ein einfaches Beispiel für asynchrones Lesen:
using System;
using System.IO;
using System.Threading.Tasks;
public class AsyncReadExample
{
public static async Task Main()
{
// Specified Path
string path = "output.txt";
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None, 4096, true))
{
byte[] buffer = new byte[1024];
int bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length);
string result = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine(result);
}
}
}Imports System
Imports System.IO
Imports System.Threading.Tasks
Public Class AsyncReadExample
Public Shared Async Function Main() As Task
' Specified Path
Dim path As String = "output.txt"
Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None, 4096, True)
Dim buffer(1023) As Byte
Dim bytesRead As Integer = Await fileStream.ReadAsync(buffer, 0, buffer.Length)
Dim result As String = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead)
Console.WriteLine(result)
End Using
End Function
End ClassDie ReadAsync-Methode liest die Daten asynchron. Die FileAccess.Read- und FileMode.Open-Parameter steuern den Zugriff auf die Datei.
Beispiel für die Behandlung von Ausnahmen
Beim Arbeiten mit FileStream ist es wichtig, Ausnahmen zu behandeln, um Laufzeitfehler zu vermeiden und Systemressourcen ordnungsgemäß zu verwalten. Hier ist ein Muster für den Umgang mit Ausnahmen beim Lesen oder Schreiben von Dateien:
using System;
using System.IO;
public class ExceptionHandlingExample
{
public static void Main()
{
string path = "nonexistentfile.txt";
try
{
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[1024];
int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
Console.WriteLine("Bytes Read: " + bytesRead);
}
}
catch (FileNotFoundException e)
{
Console.WriteLine($"Exception: {e.Message}");
}
}
}Imports System
Imports System.IO
Public Class ExceptionHandlingExample
Public Shared Sub Main()
Dim path As String = "nonexistentfile.txt"
Try
Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
Dim buffer(1023) As Byte
Dim bytesRead As Integer = fileStream.Read(buffer, 0, buffer.Length)
Console.WriteLine("Bytes Read: " & bytesRead)
End Using
Catch e As FileNotFoundException
Console.WriteLine($"Exception: {e.Message}")
End Try
End Sub
End ClassPufferung und Leistung
Die FileStream-Klasse enthält einen Puffermechanismus, der eine schnellere Leistung ermöglicht, insbesondere beim Arbeiten mit großen Dateien. Durch die Verwendung eines Puffers werden Daten vorübergehend im Speicher gespeichert, wodurch der Bedarf an ständigem Festplattenzugriff reduziert wird.
using System;
using System.IO;
public class BufferingExample
{
public static void Main()
{
string path = "bufferedfile.txt";
byte[] data = System.Text.Encoding.UTF8.GetBytes("Buffered FileStream example.");
using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.WriteThrough))
{
fileStream.Write(data, 0, data.Length);
}
}
}Imports System
Imports System.IO
Public Class BufferingExample
Public Shared Sub Main()
Dim path As String = "bufferedfile.txt"
Dim data As Byte() = System.Text.Encoding.UTF8.GetBytes("Buffered FileStream example.")
Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.WriteThrough)
fileStream.Write(data, 0, data.Length)
End Using
End Sub
End ClassHier stellt FileOptions.WriteThrough sicher, dass Daten direkt in die Datei geschrieben werden, wobei zusätzliche Pufferung umgangen wird. Sie können jedoch die Puffergröße für die Leistungsoptimierung steuern.
Einführung in IronPDF

IronPDF ist eine robuste C#-PDF-Bibliothek zum Erstellen, Bearbeiten und Verarbeiten von PDF-Dokumenten innerhalb von .NET-Anwendungen. Entwickler können mithilfe von IronPDF PDFs aus verschiedenen Eingaben wie HTML, Bildern und sogar rohem Text generieren. Mit Funktionen wie Wasserzeichen, Zusammenführung, Aufteilung und Passwortschutz ist IronPDF ideal für Web- und Desktop-Anwendungen mit präziser Kontrolle über die PDF-Ausgabe.
IronPDF mit FileStream
Hier ist ein Beispiel zur Generierung eines PDFs mit IronPDF und zum Speichern in einem FileStream. Dies zeigt, wie IronPDF nahtlos mit FileStream integriert ist und Entwicklern ermöglicht, die Erstellung und das Speichern von PDFs programmgesteuert zu steuern.
using System;
using System.IO;
using IronPdf;
public class IronPDFExample
{
public static void Main()
{
// Define the file path
string path = "output.pdf";
// Create an HTML string that we want to convert to PDF
var htmlContent = "<h1>IronPDF Example</h1><p>This PDF was generated using IronPDF and saved with FileStream.</p>";
// Initialize IronPDF's ChromePdfRenderer to render HTML as PDF
var renderer = new ChromePdfRenderer();
// Generate the PDF from the HTML string
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
// Use FileStream to save the generated PDF
using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
pdfDocument.SaveAs(fileStream);
}
Console.WriteLine("PDF created and saved successfully.");
}
}Imports System
Imports System.IO
Imports IronPdf
Public Class IronPDFExample
Public Shared Sub Main()
' Define the file path
Dim path As String = "output.pdf"
' Create an HTML string that we want to convert to PDF
Dim htmlContent = "<h1>IronPDF Example</h1><p>This PDF was generated using IronPDF and saved with FileStream.</p>"
' Initialize IronPDF's ChromePdfRenderer to render HTML as PDF
Dim renderer = New ChromePdfRenderer()
' Generate the PDF from the HTML string
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Use FileStream to save the generated PDF
Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
pdfDocument.SaveAs(fileStream)
End Using
Console.WriteLine("PDF created and saved successfully.")
End Sub
End ClassAbschluss
Die FileStream-Klasse in C# bietet leistungsstarke Funktionen zum Verwalten von Datei-Eingabe und -Ausgabe. Sie ermöglicht es Entwicklern, Daten effizient zu lesen und zu schreiben, die aktuelle Position innerhalb einer Datei zu steuern und asynchron zu arbeiten, indem sie versteht, wie Byte-Arrays, Dateipfade und Stream-Verarbeitung zusammenarbeiten. Die Verwendung von FileStream in Kombination mit IronPDF bietet Entwicklern die Flexibilität, PDFs effizient in .NET-Anwendungen zu verarbeiten. Egal, ob Sie Berichte generieren, Dateien speichern oder dynamische Inhalte verarbeiten, diese Kombination bietet ausgefeilte Kontrolle über das Erstellen und Speichern von PDF-Dokumenten.
IronPDF bietet eine kostenlose Testversion und eine $999-Lizenzgebühr, wodurch es eine wettbewerbsfähige Lösung für professionelle PDF-Generierungsbedürfnisse ist.

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO Cameron Rimington in ein Unternehmen mit mehr als 50 Mitarbeitern verwandelt, das die NASA, Tesla und globale Regierungsbehörden beliefert.
Verwandte Artikel


