2 von 4 fanden dies hilfreich - Dieses Thema bewerten.

FileStream-Klasse

Macht einen Stream um eine Datei verfügbar, wobei synchrone und asynchrone Lese- und Schreibvorgänge unterstützt werden.

Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)

[ComVisibleAttribute(true)] 
public class FileStream : Stream
/** @attribute ComVisibleAttribute(true) */ 
public class FileStream extends Stream
ComVisibleAttribute(true) 
public class FileStream extends Stream

Verwenden Sie die FileStream-Klasse für den Schreib- und Lesezugriff auf Dateien in einem Dateisystem, zum Öffnen und Schließen dieser Dateien sowie zum Bearbeiten weiterer dateibezogener Betriebssystemhandles, z. B. Pipes, Standardeingaben und Standardausgaben. Sie können Lese- und Schreibvorgänge als synchrone oder asynchrone Operationen festlegen. FileStream puffert Eingaben und Ausgaben, um die Leistung zu verbessern.

FileStream-Objekte unterstützen unter Verwendung der Seek-Methode den wahlfreien Zugriff auf Dateien. Seek ermöglicht das Verschieben der Lese-/Schreibposition an eine beliebige Stelle in der Datei. Dies erfolgt durch Parameter für den Bezugspunkt des Byteoffset. Der Byteoffset bezieht sich auf den Bezugspunkt für die Suche. Dies kann der Anfang, die aktuelle Position oder das Ende der zugrunde liegenden Datei sein, wie durch die drei Eigenschaften der SeekOrigin-Klasse dargestellt.

HinweisHinweis

Datenträgerdateien unterstützen immer den wahlfreien Zugriff. Während des Erstellens wird der CanSeek-Eigenschaftenwert je nach zugrunde liegendem Dateityp auf true oder false festgelegt. Insbesondere ist der CanSeek-Eigenschaftenwert true, wenn der zugrunde liegende Dateityp wie in winbase.h definiert FILE_TYPE_DISK ist. Andernfalls ist der CanSeek-Eigenschaftenwert false.

Obwohl die synchronen Methoden Read und Write sowie die asynchronen Methoden BeginRead, BeginWrite, EndRead und EndWrite sowohl im synchronen als auch im asynchronen Modus verwendet werden können, wirkt sich der Modus auf die Leistung dieser Methoden aus. FileStream öffnet Dateien standardmäßig synchron, stellt jedoch zum asynchronen Öffnen von Dateien den FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean)-Konstruktor bereit.

Wenn ein Prozess mit einer teilweise gesperrten Datei beendet wird oder eine Datei mit ausstehenden Sperren schließt, ist das Verhalten nicht definiert.

Stellen Sie sicher, dass die Dispose-Methode für alle FileStream-Objekte aufgerufen wird, insbesondere in Umgebungen mit begrenztem Speicherplatz. Bei der Durchführung von E/A-Vorgängen kann eine Ausnahme ausgelöst werden, falls kein Speicherplatz verfügbar ist und falls die Dispose-Methode nicht vor der Finalisierung von FileStream aufgerufen wird.

Informationen zu Verzeichnis- und anderen Dateioperationen finden Sie unter den Klassen File, Directory und Path. Die File-Klasse ist eine Unterstützungsklasse mit statischen Methoden, die vorrangig zum Erstellen von FileStream-Objekten anhand von Dateipfaden und den Standardeingabe-, Standardausgabe- und Standardfehlergeräten eingesetzt werden. Die MemoryStream-Klasse erstellt einen Stream aus einem Bytearray und kann ähnlich wie FileStream verwendet werden.

In der folgenden Tabelle sind Beispiele für andere typische oder verwandte E/A-Aufgaben aufgeführt.

Aufgabe

Beispiel in diesem Thema

Erstellen einer Textdatei.

Gewusst wie: Schreiben von Text in eine Datei

In eine Textdatei schreiben.

Gewusst wie: Schreiben von Text in eine Datei

Aus einer Textdatei lesen.

Gewusst wie: Lesen aus einer Textdatei

Text an eine Datei anfügen.

Gewusst wie: Öffnen und Anfügen an eine Protokolldatei

File.AppendText

FileInfo.AppendText

Eine Datei umbenennen oder verschieben.

File.Move

FileInfo.MoveTo

Eine Datei löschen.

File.Delete

FileInfo.Delete

Eine Datei kopieren.

File.Copy

FileInfo.CopyTo

Die Größe einer Datei abrufen.

FileInfo.Length

Die Attribute einer Datei abrufen.

File.GetAttributes

Die Attribute einer Datei festlegen.

File.SetAttributes

Bestimmen, ob eine Datei vorhanden ist.

File.Exists

Aus einer Binärdatei lesen.

Gewusst wie: Lesen und Schreiben einer neu erstellten Datendatei

In eine Binärdatei schreiben.

Gewusst wie: Lesen und Schreiben einer neu erstellten Datendatei

Abrufen einer Dateierweiterung.

Path.GetExtension

Abrufen des vollqualifizierten Pfads einer Datei.

Path.GetFullPath

Abrufen des Dateinamens sowie der Dateierweiterung aus einem Pfad.

Path.GetFileName

Ändern der Erweiterung einer Datei.

Path.ChangeExtension

Erkennung von Änderungen an der Streamposition

Wenn ein FileStream-Objekt keinen exklusiven Zugriff auf das Handle besitzt, kann gleichzeitig ein anderer Thread auf das Dateihandle zugreifen und die Position des vom Betriebssystem verwendeten Dateizeigers ändern, der diesem Dateihandle zugeordnet ist. Das kann dazu führen, dass die zwischengespeicherte Position im FileStream und die zwischengespeicherten Daten im Puffer manipuliert werden. Das FileStream-Objekt führt routinemäßig eine Prüfung aller Methoden aus, die auf den zwischengespeicherten Puffer zugreifen. Dadurch wird sichergestellt, dass die vom Betriebssystem verwendete Handleposition und die vom FileStream-Objekt verwendete zwischengespeicherte Position übereinstimmen.

Wenn beim Aufruf der Read-Methode eine unerwartete Änderung der Handleposition ermittelt wird, wird der Inhalt des Puffers von .NET Framework verworfen und der Stream erneut aus der Datei gelesen. Dies kann sich nicht nur auf die Leistung, sondern je nach Dateigröße und möglichen anderen Prozessen auch auf die Position des Dateistreams auswirken.

Wenn beim Aufruf der Write-Methode eine unerwartete Änderung der Handleposition ermittelt wird, wird der Inhalt des Puffers verworfen und eine IOException ausgelöst.

In folgenden Fällen besitzt ein FileStream-Objekt keinen exklusiven Zugriff auf das Handle: wenn auf die SafeFileHandle-Eigenschaft zugriffen wird, um das Handle verfügbar zu machen, oder wenn im Konstruktor des FileStream-Objekts die SafeFileHandle-Eigenschaft definiert wurde.

Im folgenden Beispiel werden einige der FileStream-Konstruktoren veranschaulicht.

using System;
using System.IO;
using System.Text;

class Test 
{
	
    public static void Main() 
    {
        string path = @"c:\temp\MyTest.txt";

        // Delete the file if it exists.
        if (File.Exists(path)) 
        {
            File.Delete(path);
        }

        //Create the file.
        using (FileStream fs = File.Create(path)) 
        {
            AddText(fs, "This is some text");
            AddText(fs, "This is some more text,");
            AddText(fs, "\r\nand this is on a new line");
            AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");

            for (int i=1;i < 120;i++) 
            {
                AddText(fs, Convert.ToChar(i).ToString());

                //Split the output at every 10th character.
                if (Math.IEEERemainder(Convert.ToDouble(i), 10) == 0) 
                {
                    AddText(fs, "\r\n");
                }
            }
        }

        //Open the stream and read it back.
        using (FileStream fs = File.OpenRead(path)) 
        {
            byte[] b = new byte[1024];
            UTF8Encoding temp = new UTF8Encoding(true);
            while (fs.Read(b,0,b.Length) > 0) 
            {
                Console.WriteLine(temp.GetString(b));
            }
        }
    }

    private static void AddText(FileStream fs, string value) 
    {
        byte[] info = new UTF8Encoding(true).GetBytes(value);
        fs.Write(info, 0, info.Length);
    }
}

import System.*;
import System.IO.*;
import System.Text.*;

class Test
{
    public static void main(String[] args)
    {
        String path = "c:\\temp\\MyTest.txt";

        // Delete the file if it exists.
        if (File.Exists(path)) {
            File.Delete(path);
        }
        
        //Create the file.
        {
            FileStream fs = File.Create(path);
            try {
                AddText(fs, "This is some text");
                AddText(fs, "This is some more text,");
                AddText(fs, "\r\nand this is on a new line");
                AddText(fs, 
                    "\r\n\r\nThe following is a subset of characters:\r\n");
                for (int i = 1; i < 120; i++) {
                    AddText(fs, System.Convert.ToString((char)i));

                    //Split the output at every 10th character.
                    if (Math.IEEEremainder(Convert.ToDouble(i), 10) == 0) {
                        AddText(fs, "\r\n");
                    }
                }
            }
            finally {
                fs.Dispose();
            }
        }
        //Open the stream and read it back.
        {
            FileStream fs = File.OpenRead(path);
            try {
                ubyte b[] = new ubyte[1024];
                UTF8Encoding temp = new UTF8Encoding(true);
                while (fs.Read(b, 0, b.length) > 0) {
                    Console.WriteLine(temp.GetString(b));
                }
            }
            finally {
                fs.Dispose();
            }
        }
    } //main

    private static void AddText(FileStream fs, String value)
    {
        ubyte info[] = (new UTF8Encoding(true)).GetBytes(value);
        fs.Write(info, 0, info.length);
    } //AddText
} //Test

Im folgenden Beispiel wird eine Datei geöffnet bzw. erstellt, sofern sie noch nicht vorhanden ist. Anschließend werden am Ende der Datei Informationen angefügt.

using System;
using System.IO;
using System.Text;

class FSOpenWrite
{
    public static void Main()
    {
        FileStream fs=new FileStream("c:\\Variables.txt", FileMode.Append, FileAccess.Write, FileShare.Write);
        fs.Close();
        StreamWriter sw=new StreamWriter("c:\\Variables.txt", true, Encoding.ASCII);
        string NextLine="This is the appended line.";
        sw.Write(NextLine);
        sw.Close();
    }
}

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)