Практическое руководство. Запись текста в файл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

Пример Синхронное добавление текста с помощью 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