Поделиться через


File.ReadLines Метод

Определение

Считывает строки файла.

Перегрузки

ReadLines(String, Encoding)

Чтение строк файла с заданным кодировкой.

ReadLines(String)

Считывает строки файла.

ReadLines(String, Encoding)

Исходный код:
File.cs
Исходный код:
File.cs
Исходный код:
File.cs

Чтение строк файла с заданным кодировкой.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ ReadLines(System::String ^ path, System::Text::Encoding ^ encoding);
public static System.Collections.Generic.IEnumerable<string> ReadLines (string path, System.Text.Encoding encoding);
static member ReadLines : string * System.Text.Encoding -> seq<string>
Public Shared Function ReadLines (path As String, encoding As Encoding) As IEnumerable(Of String)

Параметры

path
String

Файл для чтения.

encoding
Encoding

Кодировка, применяемая к содержимому файла.

Возвращаемое значение

Все строки файла или строки, которые являются результатом запроса.

Исключения

Версии .NET Framework и .NET Core старше 2.1: path представляет собой строку нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов, определенных методом GetInvalidPathChars().

path недопустим (например, он находится на несопоставленном диске).

Файл, указанный path, не найден.

При открытии файла произошла ошибка ввода-вывода.

path превышает определенную системой максимальную длину.

Вызывающий объект не имеет требуемого разрешения.

path указывает файл, доступный только для чтения.

-или-

Эта операция не поддерживается на текущей платформе.

-или-

path — это каталог.

-или-

Вызывающий объект не имеет требуемого разрешения.

Комментарии

Используйте этот метод, чтобы указать кодировку, используемую для чтения файла.

Методы ReadLines и ReadAllLines отличаются следующим образом: при использовании ReadLinesможно начать перечисление коллекции строк перед возвратом всей коллекции. При использовании ReadAllLinesнеобходимо дождаться возврата всего массива строк, прежде чем получить доступ к массиву. Поэтому при работе с очень большими файлами ReadLines может быть более эффективным.

Для выполнения следующих действий можно использовать метод ReadLines.

Применяется к

ReadLines(String)

Исходный код:
File.cs
Исходный код:
File.cs
Исходный код:
File.cs

Считывает строки файла.

public:
 static System::Collections::Generic::IEnumerable<System::String ^> ^ ReadLines(System::String ^ path);
public static System.Collections.Generic.IEnumerable<string> ReadLines (string path);
static member ReadLines : string -> seq<string>
Public Shared Function ReadLines (path As String) As IEnumerable(Of String)

Параметры

path
String

Файл для чтения.

Возвращаемое значение

Все строки файла или строки, которые являются результатом запроса.

Исключения

Версии .NET Framework и .NET Core старше 2.1: path представляет собой строку нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов, определенных методом GetInvalidPathChars().

path недопустим (например, он находится на несопоставленном диске).

Файл, указанный path, не найден.

При открытии файла произошла ошибка ввода-вывода.

path превышает определенную системой максимальную длину.

Вызывающий объект не имеет требуемого разрешения.

path указывает файл, доступный только для чтения.

-или-

Эта операция не поддерживается на текущей платформе.

-или-

path — это каталог.

-или-

Вызывающий объект не имеет требуемого разрешения.

Примеры

В следующем примере считываются строки файла для поиска строк, содержащих указанные строки.

foreach (string line in File.ReadLines(@"d:\data\episodes.txt"))
{
    if (line.Contains("episode") & line.Contains("2006"))
    {
        Console.WriteLine(line);
    }
}
for line in File.ReadLines @"d:\data\episodes.txt" do
    if line.Contains "episode" && line.Contains "2006" then
        printfn $"{line}"
For Each line As String In File.ReadLines("d:\data\episodes.txt")
    If line.Contains("episode") And line.Contains("2006") Then
        Console.WriteLine(line)
    End If
Next line

В следующем примере используется метод ReadLines в запросе LINQ, который перечисляет все каталоги для файлов с расширением .txt, считывает каждую строку файла и отображает строку, если она содержит строку "Майкрософт".

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Set a variable to the My Documents path.
            string docPath =
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            var files = from file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine($"{f.File}\t{f.Line}");
            }
            Console.WriteLine($"{files.Count().ToString()} files found.");
        }
        catch (UnauthorizedAccessException uAEx)
        {
            Console.WriteLine(uAEx.Message);
        }
        catch (PathTooLongException pathEx)
        {
            Console.WriteLine(pathEx.Message);
        }
    }
}
open System
open System.IO

try
    // Set a variable to the My Documents path.
    let docPath =
        Environment.GetFolderPath Environment.SpecialFolder.MyDocuments

    let files =
        query {
            for file in Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories) do
            for line in File.ReadLines file do
            where (line.Contains "Microsoft")
            select {| File = file; Line = line |}
        }

    for f in files do
        printfn $"{f.File}\t{f.Line}"
    printfn $"{Seq.length files} files found."

with
| :? UnauthorizedAccessException as uAEx -> printfn $"{uAEx.Message}"
| :? PathTooLongException as pathEx -> printfn $"{pathEx.Message}"
Imports System.IO
Imports System.Xml.Linq

Module Module1

    Sub Main()
        Try
            Dim docPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            Dim files = From chkFile In Directory.EnumerateFiles(docPath, "*.txt", SearchOption.AllDirectories)
                        From line In File.ReadLines(chkFile)
                        Where line.Contains("Microsoft")
                        Select New With {.curFile = chkFile, .curLine = line}

            For Each f In files
                Console.WriteLine($"{f.File}\t{f.Line}")
            Next
            Console.WriteLine($"{files.Count} files found.")
        Catch uAEx As UnauthorizedAccessException
            Console.WriteLine(uAEx.Message)
        Catch pathEx As PathTooLongException
            Console.WriteLine(pathEx.Message)
        End Try
    End Sub
End Module

Комментарии

Методы ReadLines и ReadAllLines отличаются следующим образом: при использовании ReadLinesможно начать перечисление коллекции строк перед возвратом всей коллекции; при использовании ReadAllLinesнеобходимо ожидать возврата всего массива строк, прежде чем получить доступ к массиву. Поэтому при работе с очень большими файлами ReadLines может быть более эффективным.

Для выполнения следующих действий можно использовать метод ReadLines.

  • Выполните LINQ to Objects запросы к файлу, чтобы получить отфильтрованный набор строк.

  • Напишите возвращаемую коллекцию строк в файл с помощью метода File.WriteAllLines(String, IEnumerable<String>) или добавьте их в существующий файл с помощью метода File.AppendAllLines(String, IEnumerable<String>).

  • Создайте немедленно заполненный экземпляр коллекции, которая принимает коллекцию строк IEnumerable<T> для конструктора, например IList<T> или Queue<T>.

Этот метод использует UTF8 для значения кодирования.

Применяется к