C# 读写TXT文件操作

一 、读取文本文件有多种方法

1 使用 StreamReader 类打开、读取和关闭文本文件。使用 ReadLine 方法逐行读取文本文件,ReadToEnd方法将文本文件读取到末尾。

        /// <summary>
        /// 逐行将文本文件读取到末尾
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string ReadTXT_StreamReader(string pathAName)
        {
            StreamReader ObjectName = new StreamReader(pathAName);
            return ObjectName.ReadToEnd(); 
        }

2、StreamReader继承TextReader,操作和StreamReader一致,使用 ReadLine 方法逐行读取文本文件,ReadToEnd方法将文本文件读取到末尾。

        /// <summary>
        /// 逐行读取文件,返回列表
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static List<string> ReadTXT_TextReader(string pathAName)
        {
            List<string> txtContent = new List<string>();
            if (!File.Exists(pathAName))
            {
                using (TextReader reader = new StreamReader(pathAName))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null) // 逐行读取文件内容
                    {
                        txtContent.Add(line); // 输出每行内容到控制台
                    }
                }
            }
            return txtContent;
        }

3、使用 File 类打开、读取和关闭文本文件。
File.ReadAllLines(string path, Encoding encoding) 方法:打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。返回包含文件所有行的字符串数组。

        /// <summary>
        /// 逐行读取文件,返回数组
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string[] ReadTXT_ReadAllLines(string pathAName)
        {
            string[] txtContent = null;
            txtContent = System.IO.File.ReadAllLines(pathAName, Encoding.UTF8);
            return txtContent;
        }

File.ReadAllText(string path, Encoding encoding)方法:打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。逐行读取文本文件。返回包含文件所有行的字符串。

        /// <summary>
        /// 读取,返回字符串
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string ReadTXT_ReadAllText(string pathAName)
        {
            string txtContent = null;
            txtContent = System.IO.File.ReadAllText(pathAName, Encoding.UTF8);
            return txtContent;
        }

ReadLines(string path, Encoding encoding)方法:读取具有指定编码的文件的文本行。返回该文件的所有行或查询所示的行。

        /// <summary>
        /// 读取,返回枚举类型
        /// 高效地逐行读取大型文本文件的最佳方法
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string ReadTXT_ReadLines(string pathAName)
        {
            IEnumerable<string> line = System.IO.File.ReadLines(pathAName, Encoding.UTF8);
            return String.Join(Environment.NewLine, line);
        }

二、创建、写入文本文件

1、FileStream 创建文件,可设置文件属性,StreamWriter 打开、写入、关闭文件。
a)方式1:

        /// <summary>
        /// 数据流形式写入文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="txtContent"></param>
        /// <returns></returns>
        public static void WriteTXT_StreamWriter(string pathAName, string txtContent)
        {
            FileStream fs;
            //判断是否已经有了这个文件
            if (!System.IO.File.Exists(pathAName))
            {
                //没有则创建这个文件,创建写入文件,设置文件属性为隐藏
                fs = new FileStream(pathAName, FileMode.Create, FileAccess.Write);
            }
            else
            {
                fs = new FileStream(pathAName, FileMode.Open, FileAccess.Write);
            }
            File.SetAttributes(@pathAName, FileAttributes.Hidden);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(txtContent.Trim());//写入值
            sw.Flush();
            sw.Dispose();
            sw.Close();
            fs.Close();
        }

b)方式2

        /// <summary>
        /// 数据流形式写入文件
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void Write(string pathAName, string Logstring)
        {
            if (!File.Exists(pathAName))
            {
                //创建.txt文件
                FileStream stream = File.Create(pathAName);
                stream.Close();
                stream.Dispose();
            }
            // true:若文件存在,则将数据追加到该文件中若要覆盖该文件
            using (StreamWriter writer = new StreamWriter(pathAName, true))
            {
                //写入文件
                writer.WriteLine(Logstring);
                writer.Close();
            }
        }

2、StreamWriter 继承 TextWriter ,StreamWriter 创建、打开、WriteLine 写入文件

        /// <summary>
        /// 创建、写入文本文档
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void WriteTXT_TextWriter(string pathAName, string Logstring)
        {
            if (!File.Exists(pathAName))
            {
                using (TextWriter reader = new StreamWriter(pathAName))
                {
                    reader.WriteLine(Logstring.Trim());    
                }
            }
        }

3、使用 File 类创建、写入和关闭文本文件
WriteAllText(string path, string contents) 方法:创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则覆盖该文件。

        /// <summary>
        /// 在最开始位置追加,追加到开头
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void AddTextFirst(string pathAName, string Logstring)
        {
            string s = File.ReadAllText(pathAName);
            s = s.Insert(0, Logstring.Trim() + "\r\n");
            File.WriteAllText(pathAName, s);
        }

WriteAllLines(string path, string[] contents) :创建一个新文件,在其中写入指定的字符串数组,然后关闭该文件。

        /// <summary>
        /// File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。
        /// 每个数组元素都被写入文件的一行,且方法会自动在每行的末尾添加换行符。
        /// </summary>
        /// <param name="Logstring"></param>
        /// <param name="pathAName"></param>
        public static void WriteTXT(string pathAName,string []Logstring)
        {
            File.WriteAllLines(pathAName, Logstring);//写入文件
        }

4、在最开始位置追加,追加到开头

        /// <summary>
        /// 在最开始位置追加,追加到开头
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void AddTextFirst(string pathAName, string Logstring)
        {
            string s = File.ReadAllText(pathAName);
            s = s.Insert(0, Logstring.Trim() + "\r\n");
            File.WriteAllText(pathAName, s);
        }

5、在最后位置追加

        /// <summary>
        /// 在最后位置追加
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void AddTextEnd(string pathAName, string Logstring)
        {
            StreamWriter sw = File.AppendText(pathAName);
            sw.WriteLine(Logstring.Trim());
            sw.Close();
        }

三、使用实例

        OpenFileDialog openFileDialog1;
        SaveFileDialog saveFileOpen;
        string dir = null;
        public Form1()
        {
            InitializeComponent();
            dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Title = "导入";
            openFileDialog1.Filter = "TXT文件|*.txt";
            openFileDialog1.Multiselect = false;
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.InitialDirectory = dir;

            saveFileOpen = new SaveFileDialog();
            saveFileOpen.Title = "保存文件";
            saveFileOpen.Filter = "TXT文件(*.txt)|*.txt";
            saveFileOpen.RestoreDirectory = true;
            saveFileOpen.InitialDirectory = dir;
        }
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            richTextBox1.ScrollToCaret();
        }
        /// <summary>
        /// 读入txt文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string info = null;
            string txtContent = null;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                info = openFileDialog1.FileName;
            }
            if (!string.IsNullOrEmpty(info))
            {
                txtContent = OperateTXT.ReadTXT_StreamReader(info);
                richTextBox1.AppendText(txtContent);
            }
        }
        /// <summary>
        /// 写入txt文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            string now_date = DateTime.Now.ToString("MMddHHmmss") + ".txt";
            string newPath = System.IO.Path.Combine(dir, now_date);

            saveFileOpen.FileName = newPath; //设置默认另存为的名字
            if (saveFileOpen.ShowDialog() == DialogResult.OK)
            {
                newPath = saveFileOpen.FileName;
            }
            OperateTXT.WriteTxt(newPath, richTextBox1.Text);
        }

在这里插入图片描述
静态操作使用类

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileOperationsDemo
{
    public static class OperateTXT
    {
        #region 写入文件
        /// <summary>
        /// 数据流形式写入文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="txtContent"></param>
        /// <returns></returns>
        public static void WriteTXT_StreamWriter(string pathAName, string txtContent)
        {
            FileStream fs;
            //判断是否已经有了这个文件
            if (!System.IO.File.Exists(pathAName))
            {
                //没有则创建这个文件,创建写入文件,设置文件属性为隐藏
                fs = new FileStream(pathAName, FileMode.Create, FileAccess.Write);
            }
            else
            {
                fs = new FileStream(pathAName, FileMode.Open, FileAccess.Write);
            }
            File.SetAttributes(@pathAName, FileAttributes.Hidden);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(txtContent.Trim());//写入值
            sw.Flush();
            sw.Dispose();
            sw.Close();
            fs.Close();
        }
        /// <summary>
        /// 数据流形式写入文件
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void Write(string pathAName, string Logstring)
        {
            if (!File.Exists(pathAName))
            {
                //创建.txt文件
                FileStream stream = File.Create(pathAName);
                stream.Close();
                stream.Dispose();
            }
            // true:若文件存在,则将数据追加到该文件中若要覆盖该文件
            using (StreamWriter writer = new StreamWriter(pathAName, true))
            {
                //写入文件
                writer.WriteLine(Logstring);
                writer.Close();
            }
        }
        /// <summary>
        /// 创建、写入文本文档
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void WriteTXT_TextWriter(string pathAName, string Logstring)
        {
            if (!File.Exists(pathAName))
            {
                using (TextWriter reader = new StreamWriter(pathAName))
                {
                    reader.WriteLine(Logstring.Trim());    
                }
            }
        }
        /// <summary> 
        /// File.WriteAllText 方法用于将单个字符串写入文本文件。
        /// 整个字符串将写入文件,不会自动添加换行符。
        /// 如果需要在字符串中包含换行,需要手动添加换行符。
        /// </summary>
        /// <param name="Logstring"></param>
        /// <param name="pathAName"></param>
        public static void WriteTxt(string pathAName, string Logstring)
        {
            File.WriteAllText(pathAName, Logstring);//写入文件
        }
        /// <summary>
        /// File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。
        /// 每个数组元素都被写入文件的一行,且方法会自动在每行的末尾添加换行符。
        /// </summary>
        /// <param name="Logstring"></param>
        /// <param name="pathAName"></param>
        public static void WriteTXT(string pathAName,string []Logstring)
        {
            File.WriteAllLines(pathAName, Logstring);//写入文件
        }
        /// <summary>
        /// 在最开始位置追加,追加到开头
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void AddTextFirst(string pathAName, string Logstring)
        {
            string s = File.ReadAllText(pathAName);
            s = s.Insert(0, Logstring.Trim() + "\r\n");
            File.WriteAllText(pathAName, s);
        }
        /// <summary>
        /// 在最后位置追加
        /// </summary>
        /// <param name="pathAName"></param>
        /// <param name="Logstring"></param>
        public static void AddTextEnd(string pathAName, string Logstring)
        {
            StreamWriter sw = File.AppendText(pathAName);
            sw.WriteLine(Logstring.Trim());
            sw.Close();
        }
        #endregion

        #region 读取文件
        /// <summary>
        /// 将文本文件读取到末尾
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string ReadTXT_StreamReader(string pathAName)
        {
            StreamReader ObjectName = new StreamReader(pathAName); 
            return ObjectName.ReadToEnd();
        }
        /// <summary>
        /// 逐行读取文件,返回列表
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static List<string> ReadTXT_TextReader(string pathAName)
        {
            List<string> txtContent = new List<string>();
            if (!File.Exists(pathAName))
            {
                using (TextReader reader = new StreamReader(pathAName))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null) // 逐行读取文件内容
                    {
                        txtContent.Add(line); // 输出每行内容到控制台
                    }
                }
            }
            return txtContent;
        }
        /// <summary>
        /// 逐行读取文件,返回数组
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string[] ReadTXT_ReadAllLines(string pathAName)
        {
            string[] txtContent = null;
            txtContent = System.IO.File.ReadAllLines(pathAName, Encoding.UTF8);
            return txtContent;
        }
        /// <summary>
        /// 读取,返回字符串
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string ReadTXT_ReadAllText(string pathAName)
        {
            string txtContent = null;
            txtContent = System.IO.File.ReadAllText(pathAName, Encoding.UTF8);
            return txtContent;
        }
        /// <summary>
        /// 读取,返回枚举类型
        /// 高效地逐行读取大型文本文件的最佳方法
        /// </summary>
        /// <param name="pathAName"></param>
        /// <returns></returns>
        public static string ReadTXT_ReadLines(string pathAName)
        {
            IEnumerable<string> line = System.IO.File.ReadLines(pathAName, Encoding.UTF8);
            return String.Join(Environment.NewLine, line);
        }
        #endregion
    }
}

<think>好的,我现在需要回答用户关于C#读取TXT文件的示例代码及方法的问题。首先,用户提供了两个引用内容,其中引用[1]和引用[2]都涉及C#读写txt文件的方法和代码示例。我需要结合这些信息,并按照用户的要求结构化回答。 首先,我应该确定用户的主要需求:他们希望了解如何使用C#读取TXT文件,包括示例代码和方法。因此,我需要列举几种常见的方法,每种方法都需要有代码示例和说明。根据引用[2],用户提供的代码示例使用了StreamReader类,并处理了异常。这可能是一个基础方法,但用户可能还想了解其他方法,如File.ReadAllText、File.ReadAllLines等,这些是更简洁的方式。 接下来,我需要确保回答的结构清晰,分点说明每种方法。例如,可以分成使用StreamReader、File.ReadAllText、File.ReadAllLines等方法。每个部分需要说明步骤,给出代码示例,并提到异常处理,如引用[2]中的try-catch块。 另外,用户要求生成相关问题,我需要根据回答内容提出相关问题,比如性能分析、编码问题、大文件处理等。这些问题应该与读取TXT文件的不同方面相关,帮助用户进一步学习。 还需要注意用户提到的系统级指令,比如数学公式的格式,但这个问题可能不涉及数学内容,所以可能不需要使用。但需要检查是否有其他格式要求,如代码块的使用。用户提供的示例中使用了代码块,所以我也应该用代码块来展示C#示例代码。 同时,引用需要自然地添加到回答中,例如在提到StreamReader时引用[^2]。需要确保引用的正确位置,通常在提到对应方法或代码时添加。 还需要检查是否使用中文回答,符合所有格式要求,如行内代码使用反引号,代码块用三个反引号包裹,并指定语言为C#。此外,回答需要真实可靠,可能需要补充一些最佳实践,比如使用using语句自动释放资源,或者处理不同的编码问题,如System.Text.Encoding.UTF8等。 最后,确保回答中没有使用Markdown格式,但根据用户提供的示例,似乎允许在回答中使用代码块和引用标识。因此,按照示例的结构,组织内容,并在最后添加相关问题部分。 现在,整理思路: 1. 引言:简要说明C#读取TXT文件的常见方法,引用提供的引用内容。 2. 方法一:使用StreamReader类,代码示例来自引用[2],补充说明和异常处理。 3. 方法二:File.ReadAllText,更简洁的方式,示例代码。 4. 方法三:File.ReadAllLines,逐行读取。 5. 注意事项:编码处理、异常处理、资源释放。 6. 相关问题部分:生成三个相关问题,涉及性能、编码、大文件处理等。 需要确保每个代码示例正确,并符合C#语法。同时,注意引用标识的位置,比如在提到StreamReader方法时添加[^2],在提到其他方法时可能引用[^1]中的概述。 现在,开始撰写回答,按照上述结构,确保每个部分清晰,代码正确,引用正确标注。</think>### C# 读取 TXT 文件的示例代码及方法 在 C#读取 TXT 文件可通过多种方式实现,以下是三种常用方法及其代码示例: --- #### **方法 1:使用 `StreamReader` 逐行读取** `StreamReader` 适合逐行处理或需要灵活控制读取过程的场景。 **步骤:** 1. 创建 `StreamReader` 对象并指定文件路径和编码 2. 使用 `ReadLine()` 逐行读取内容 3. 关闭资源或使用 `using` 自动释放 ```csharp public List<string> ReadByStreamReader(string filePath) { List<string> lines = new List<string>(); try { using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8)) { string line; while ((line = reader.ReadLine()) != null) { lines.Add(line); } } return lines; } catch (Exception ex) { Console.WriteLine($"读取失败: {ex.Message}"); return null; } } ``` **说明:** - `using` 语句确保资源自动释放,避免内存泄漏 - `Encoding.UTF8` 指定编码格式,需与文件实际编码一致 --- #### **方法 2:使用 `File.ReadAllText` 一次性读取全部内容** 适合小文件快速读取全部文本内容。 **代码示例:** ```csharp string content = File.ReadAllText("test.txt", Encoding.Default); Console.WriteLine(content); ``` **说明:** - 单行代码即可完成读取,但大文件可能导致内存压力 - 默认使用 UTF-8 编码,可通过 `Encoding.Default` 指定系统默认编码 --- #### **方法 3:使用 `File.ReadAllLines` 按行存入数组** 适合需要逐行处理的场景,代码简洁。 ```csharp string[] allLines = File.ReadAllLines("test.txt", Encoding.UTF8); foreach (string line in allLines) { Console.WriteLine(line); } ``` --- ### **注意事项** 1. **编码问题** 若出现乱码,需检查文件实际编码并匹配参数,如 `Encoding.Default`(系统默认)、`Encoding.UTF8` 或 `Encoding.GetEncoding("GB2312")`。 2. **异常处理** 使用 `try-catch` 捕获文件不存在或权限错误(如 `FileNotFoundException`)。 3. **大文件处理** 避免 `ReadAllText` 或 `ReadAllLines`,改用 `StreamReader` 逐行读取以减少内存占用。 --- §§ 相关问题 §§ 1. 如何高效读取超大文本文件(如 10GB 以上)? 2. C# 中不同编码格式(UTF-8、GBK)对文件读取有何影响? 3. 如何实现异步读取 TXT 文件以提高程序响应速度?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值