File.ReadLines 方法

定義

讀取檔案的所有行。

多載

ReadLines(String)

讀取檔案的所有行。

ReadLines(String, Encoding)

讀取具有指定編碼方式的檔案所有行。

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 和 2.1 之前的 .NET Core 版本:path是長度為零的字串、只包含空格符,或包含 方法所GetInvalidPathChars()定義的一或多個無效字元。

pathnull

path 無效 (例如它位於未對應的磁碟機上)。

找不到 path 所指定的檔案。

開啟檔案時發生 I/O 錯誤。

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 擴展名之檔案的所有目錄、讀取檔案的每一行,並在包含字串 “Microsoft” 時顯示該行。

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

備註

ReadLinesReadAllLines 方法不同,如下所示:當您使用 ReadLines時,您可以在傳回整個集合之前開始列舉字串集合;當您使用 ReadAllLines時,必須先等候傳回整個字串數組,才能存取陣列。 因此,當您使用非常大型的檔案時, ReadLines 可能會更有效率。

您可以使用 ReadLines 方法來執行下列動作:

這個方法會針對編碼值使用 UTF8

適用於

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 和 2.1 之前的 .NET Core 版本:path是長度為零的字串、只包含空格符,或包含 方法所GetInvalidPathChars()定義的一或多個無效字元。

pathnull

path 無效 (例如它位於未對應的磁碟機上)。

找不到 path 所指定的檔案。

開啟檔案時發生 I/O 錯誤。

path 超過系統定義的長度上限。

呼叫端沒有必要的權限。

path 指定唯讀的檔案。

-或-

這個作業在目前平台不受支援。

-或-

path 是目錄。

-或-

呼叫端沒有必要的權限。

備註

使用這個方法可指定使用讀取檔案的編碼方式。

ReadLinesReadAllLines 方法不同,如下所示:當您使用 ReadLines時,您可以在傳回整個集合之前,開始列舉字串集合。 當您使用 ReadAllLines時,必須先等候傳回整個字串陣列,才能存取陣列。 因此,當您使用非常大型的檔案時, ReadLines 可能會更有效率。

您可以使用 ReadLines 方法來執行下列動作:

適用於