Практическое руководство. Запись текста в файлHow to: Write text to a file

В этом разделе показаны различные способы записи текста в файл для приложения .NET.This topic shows different ways to write text to a file for a .NET app.

Для записи текста в файл обычно используются следующие классы и методы.The following classes and methods are typically used to write text to a file:

  • StreamWriter содержит методы для синхронной (Write или WriteLine) или асинхронной (WriteAsync и WriteLineAsync) записи в файл.StreamWriter contains methods to write to a file synchronously (Write and WriteLine) or asynchronously (WriteAsync and WriteLineAsync).

  • File предоставляет статические методы для записи текста в файл, такие как WriteAllLines и WriteAllText, или для добавления текста в файл (AppendAllLines, AppendAllText или AppendText).File provides static methods to write text to a file, such as WriteAllLines and WriteAllText, or to append text to a file, such as AppendAllLines, AppendAllText, and AppendText.

  • Path предназначен для использования со строками, содержащими сведения о пути к файлу или каталогу.Path is for strings that have file or directory path information. Он содержит метод Combine; в .NET Core 2.1 и более поздних версиях также есть методы Join и TryJoin, которые позволяют объединять строки для создания пути к файлу или каталогу.It contains the Combine method and, in .NET Core 2.1 and later, the Join and TryJoin methods, which allow concatenation of strings to build a file or directory path.

Примечание

Нижеприведенные примеры демонстрируют минимальный объем необходимого кода.The following examples show only the minimum amount of code needed. Реальное приложение обычно обеспечивает более надежную проверку ошибок и обработку исключений.A real-world app usually provides more robust error checking and exception handling.

Пример. Синхронная запись текста с помощью StreamWriterExample: Synchronously write text with StreamWriter

В следующем примере показано, как синхронно записать текст в новый файл с помощью класса StreamWriter по одной строке за раз.The following example shows how to use the StreamWriter class to synchronously write text to a new file one line at a time. Поскольку объект StreamWriter объявляется и создается в инструкции using, вызывается метод Dispose, который автоматически выполняет очистку и закрывает поток.Because the StreamWriter object is declared and instantiated in a using statement, the Dispose method is invoked, which automatically flushes and closes the stream.

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {

        // Create a string array with the lines of text
        string[] lines = { "First line", "Second line", "Third line" };

        // Set a variable to the Documents path.
        string docPath =
          Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        // Write the string array to a new file named "WriteLines.txt".
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath, "WriteLines.txt")))
        {
            foreach (string line in lines)
                outputFile.WriteLine(line);
        }
    }
}
// The example creates a file named "WriteLines.txt" with the following contents:
// First line
// Second line
// Third line
Imports System.IO

Class WriteText

    Public Shared Sub Main()

        ' Create a string array with the lines of text
        Dim lines() As String = {"First line", "Second line", "Third line"}

        ' Set a variable to the Documents path.
        Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

        ' Write the string array to a new file named "WriteLines.txt".
        Using outputFile As New StreamWriter(Path.Combine(docPath, Convert.ToString("WriteLines.txt")))
            For Each line As String In lines
                outputFile.WriteLine(line)
            Next
        End Using

    End Sub

End Class

' The example creates a file named "WriteLines.txt" with the following contents:
' First line
' Second line
' Third line

Если вы хотите увидеть комментарии к коду, переведенные на языки, отличные от английского, сообщите нам на странице обсуждения этой проблемы на сайте GitHub.If you would like to see code comments translated to languages other than English, let us know in this GitHub discussion issue.

Пример. Синхронное добавление текста с помощью StreamWriterExample: Synchronously append text with StreamWriter

В следующем примере показано, как использовать класс StreamWriter, чтобы синхронно добавить текст в текстовый файл, созданный в первом примере.The following example shows how to use the StreamWriter class to synchronously append text to the text file created in the first example.

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {

        // Set a variable to the Documents path.
        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        // Append text to an existing file named "WriteLines.txt".
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath, "WriteLines.txt"), true))
        {
            outputFile.WriteLine("Fourth Line");
        }
    }
}
// The example adds the following line to the contents of "WriteLines.txt":
// Fourth Line
Imports System.IO

Class AppendText

    Public Shared Sub Main()

        ' Set a variable to the Documents path.
        Dim docPath As String =
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

        ' Append text to an existing file named "WriteLines.txt".
        Using outputFile As New StreamWriter(Path.Combine(docPath, Convert.ToString("WriteLines.txt")), True)
            outputFile.WriteLine("Fourth Line")
        End Using

    End Sub

End Class

' The example adds the following line to the contents of "WriteLines.txt":
' Fourth Line

Пример. Асинхронная запись текста с помощью StreamWriterExample: Asynchronously write text with StreamWriter

В следующем примере показано, как асинхронно записать текст в новый файл с помощью класса StreamWriter .The following example shows how to asynchronously write text to a new file using the StreamWriter class. Вызов метода WriteAsync должен находиться в методе async.To invoke the WriteAsync method, the method call must be within an async method. Для примера на C# требуется C# 7.1 или более поздней версии, где добавлена поддержка модификатора async для точки входа программы.The C# example requires C# 7.1 or later, which adds support for the async modifier on the program entry point.

using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // Set a variable to the Documents path.
        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        // Write the specified text asynchronously to a new file named "WriteTextAsync.txt".
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath, "WriteTextAsync.txt")))
        {
            await outputFile.WriteAsync("This is a sentence.");
        }
    }
}
// The example creates a file named "WriteTextAsync.txt" with the following contents:
// This is a sentence.
Imports System.IO

Public Module Example
    Public Sub Main()
        WriteTextAsync()
    End Sub

    Async Sub WriteTextAsync()
        ' Set a variable to the Documents path.
        Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

        ' Write the text asynchronously to a new file named "WriteTextAsync.txt".
        Using outputFile As New StreamWriter(Path.Combine(docPath, Convert.ToString("WriteTextAsync.txt")))
            Await outputFile.WriteAsync("This is a sentence.")
        End Using
    End Sub
End Module

' The example creates a file named "WriteTextAsync.txt" with the following contents:
' This is a sentence.

Пример. Запись и добавление текста с помощью класса FileExample: Write and append text with the File class

В следующем примере показано, как записать текст в новый файл и добавить новые строки текста в тот же файл с помощью класса File .The following example shows how to write text to a new file and append new lines of text to the same file using the File class. Методы WriteAllText и AppendAllLines открывают и закрывают файл автоматически.The WriteAllText and AppendAllLines methods open and close the file automatically. Если предоставленный в методе WriteAllText путь уже существует, файл будет перезаписан.If the path you provide to the WriteAllText method already exists, the file is overwritten.

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // Create a string with a line of text.
        string text = "First line" + Environment.NewLine;

        // Set a variable to the Documents path.
        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        // Write the text to a new file named "WriteFile.txt".
        File.WriteAllText(Path.Combine(docPath, "WriteFile.txt"), text);

        // Create a string array with the additional lines of text
        string[] lines = { "New line 1", "New line 2" };

        // Append new lines of text to the file
        File.AppendAllLines(Path.Combine(docPath, "WriteFile.txt"), lines);
    }
}
// The example creates a file named "WriteFile.txt" with the contents:
// First line
// And then appends the following contents:
// New line 1
// New line 2
Imports System.IO

Class WriteFile

    Public Shared Sub Main()

        ' Create a string array with the lines of text
        Dim text As String = "First line" & Environment.NewLine

        ' Set a variable to the Documents path.
        Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

        ' Write the text to a new file named "WriteFile.txt".
        File.WriteAllText(Path.Combine(docPath, Convert.ToString("WriteFile.txt")), text)

        ' Create a string array with the additional lines of text
        Dim lines() As String = {"New line 1", "New line 2"}

        ' Append new lines of text to the file
        File.AppendAllLines(Path.Combine(docPath, Convert.ToString("WriteFile.txt")), lines)

    End Sub

End Class

' The example creates a file named "WriteFile.txt" with the following contents:
' First line
' And then appends the following contents:
' New line 1
' New line 2

См. такжеSee also