Практическое руководство. Считывание из нового файла данных и запись в этот файлHow to: Read and Write to a Newly Created Data File

Классы BinaryWriter И System.IO.BinaryReader используются для записи и чтения данных вместо строк символов.The BinaryWriter and System.IO.BinaryReader classes are used for writing and reading data rather than character strings. Следующий пример демонстрирует запись данных в новый пустой файловый поток с именем Test.data и чтение данных из него.The following example demonstrates how to write data to, and read data from, a new, empty file stream called Test.data. Этот код создает файл данных в текущем каталоге, создает связанные с ним объекты BinaryWriter и BinaryReader, а затем применяет объект BinaryWriter для записи в Test.data целых чисел с 0 до 10. По завершении этих действий указатель файла остается в конце файла.After creating the data file in the current directory, the associated BinaryWriter and BinaryReader objects are created, and the BinaryWriter object is used to write the integers 0 through 10 to Test.data, which leaves the file pointer at the end of the file. Затем пример кода возвращает указатель файла в начало и через объект BinaryReader считывает его содержимое.After setting the file pointer back to the origin, the BinaryReader object reads out the specified content.

ПримерExample

using namespace System;
using namespace System::IO;

ref class MyStream
{
private:
    static String^ FILE_NAME = "Test.data";

public:
    static void Main()
    {
        // Create the new, empty data file.
        if (File::Exists(FILE_NAME))
        {
            Console::WriteLine("{0} already exists!", FILE_NAME);
            return;
        }
        FileStream^ fs = gcnew FileStream(FILE_NAME, FileMode::CreateNew);
        // Create the writer for data.
        BinaryWriter^ w = gcnew BinaryWriter(fs);
        // Write data to Test.data.
        for (int i = 0; i < 11; i++)
        {
            w->Write(i);
        }
        w->Close();
        fs->Close();
        // Create the reader for data.
        fs = gcnew FileStream(FILE_NAME, FileMode::Open, FileAccess::Read);
        BinaryReader^ r = gcnew BinaryReader(fs);
        // Read data from Test.data.
        for (int i = 0; i < 11; i++)
        {
            Console::WriteLine(r->ReadInt32());
        }
        fs->Close();
    }
};

int main()
{
    MyStream::Main();
}
using System;
using System.IO;

class MyStream
{
    private const string FILE_NAME = "Test.data";

    public static void Main()
    {
        if (File.Exists(FILE_NAME))
        {
            Console.WriteLine("{0} already exists!", FILE_NAME);
            return;
        }

        using (FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew))
        {
            using (BinaryWriter w = new BinaryWriter(fs))
            {
                for (int i = 0; i < 11; i++)
                {
                    w.Write(i);
                }
            }
        }
        
        using (FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read))
        {
            using (BinaryReader r = new BinaryReader(fs))
            {
                for (int i = 0; i < 11; i++)
                {
                    Console.WriteLine(r.ReadInt32());
                }
            }
        }
    }
}
Imports System
Imports System.IO

Class MyStream
    Private Const FILE_NAME As String = "Test.data"

    Public Shared Sub Main()
        If File.Exists(FILE_NAME) Then
            Console.WriteLine("{0} already exists!", FILE_NAME)
            Return
        End If

        Using fs As New FileStream(FILE_NAME, FileMode.CreateNew)
            Using w As New BinaryWriter(fs)
                For i As Integer = 0 To 10
                    w.Write(i)
                Next
            End Using
        End Using

        Using fs As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)
            Using r As New BinaryReader(fs)
                For i As Integer = 0 To 10
                    Console.WriteLine(r.ReadInt32())
                Next
            End Using
        End Using
    End Sub
End Class

ОтказоустойчивостьRobust Programming

Если Test.data уже существует в текущем каталоге, создается исключение IOException.If Test.data already exists in the current directory, an IOException exception is thrown. Используйте параметр FileMode.Create файлового режима при инициализации файлового потока, чтобы всегда создавать новый файл без появления исключения.Use the file mode option FileMode.Create when you initialize the file stream to always create a new file without throwing an exception.

См. такжеSee also