.Net 操作文本文件

来源:互联网 发布:vsftpd 指定端口 编辑:程序博客网 时间:2024/05/11 03:25
 

读取和写入文本文件

Read a Text File 的这篇文章部分描述如何使用 StreamReader 类来读取文本的文件。Write a Text File (Example 1),和 Write a Text File (Example 2) 在各节说明了如何使用 StreamWriter 类来向文件写入文本。

读取文本文件

若要打开、 读取,和来关闭文本文件,下面的代码使用 StreamReader 类。您可以将文本文件的路径传递给 StreamReader 构造函数自动打开该文件。ReadLine 方法读取的每一行文本,并读取递增到下一行将文件指针。当 ReadLine 方法到达文件结尾时, 它将返回空引用。
  1. 在记事本中创建示例文本文件。若要这样做,请按照下列步骤操作:
    1. 在记事本中粘贴以下文本:
      hello world
    2. 将文件另存为 Sample.txt。
  2. 启动 Microsoft Visual Studio。
  3.  文件 菜单上指向 新建,然后单击 项目
  4.  项目类型 框中,单击 Visual C# 项目,然后单击 模板 下的 控制台应用程序

    注意
    在 Visual Studio 2005 或 Visual Studio 2008 中在 项目类型 框中,单击 Visual C#,然后单击在 模板 下的 控制台应用程序
  5. Class1.cs 文件的开头添加以下代码:
    using System.IO;
    Visual Studio 2005 或 Visual Studio 2008,默认的文件的 注释 是 Program.cs。
  6. 将下面的代码添加到 Main 方法:
String line;try {//Pass the file path and file name to the StreamReader constructorStreamReader sr = new StreamReader("C:\\Sample.txt");//Read the first line of textline = sr.ReadLine();//Continue to read until you reach end of filewhile (line != null) {//write the lie to console windowConsole.WriteLine(line);//Read the next lineline = sr.ReadLine();}//close the filesr.Close();Console.ReadLine();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}   finally {Console.WriteLine("Executing finally block.");}


  1.  调试 菜单上单击编译并运行该应用程序,请 开始。若要关闭控制台窗口按 ENTER。控制台窗口将显示 Sample.txt 文件
    Hello world
    中的内容

写文本文件 (示例 1)

下面的代码使用 StreamWriter 类打开、 写入,和以关闭该文本文件。StreamReader 类以类似方式您可以将文本文件的路径传递给该 StreamWriter 构造函数,以自动打开该文件。WriteLine 方法写入文本文件的完整文本行。
  1. 启动 Visual Studio。
  2.  文件 菜单上指向 新建,然后单击 项目
  3.  项目类型 框中,单击 Visual C# 项目,然后单击 模板 下的 控制台应用程序

    注意 在 Visual Studio 2005 或 Visual Studio 2008 中在 项目类型 框中,单击 Visual C#,然后单击 模板 下的 CLR 控制台应用程序
  4. Class1.cs 文件的开头添加以下代码:
    using System.IO;
  5. 将下面的代码添加到 Main 方法:
try {//Pass the filepath and filename to the StreamWriter ConstructorStreamWriter sw = new StreamWriter("C:\\Test.txt");//Write a line of textsw.WriteLine("Hello World!!");//Write a second line of textsw.WriteLine("From the StreamWriter class");//Close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}


  1.  调试 菜单上单击编译并运行该应用程序,请 开始。此代码创建的在文本编辑器 (如记事本) 的驱动器 c。 打开 Test.txt 上名为 Test.txt 文件。 Test.txt 包含两行文字:
    Hello World!!From the StreamWriter class

写文本文件 (示例 2)

下面的代码使用 StreamWriter 类打开、 写入,和以关闭该文本文件。与前面的示例不同此代码将两个附加参数传递给构造函数。第一个参数是该文件的路径和文件的文件名。第二个参数 为 True,指定打开该文件中追加模式。如果您在第二个参数指定 False,该文件的内容将覆盖每次运行该代码。第三个参数指定 Unicode,以便 StreamWriter 对该文件以 Unicode 格式进行编码。 您还可以指定下列编码方法的第三个参数:
  • ASC11
  • Unicode
  • UTF7
  • UTF8
Write 方法是与 WriteLine 方法类似,不同之处在于 Write 方法不会自动嵌入回车或换行 (CR/LF) 字符组合。当您想要一次写入一个字符时,这是很有用。
  1. 启动 Visual Studio。
  2.  文件 菜单上指向 新建,然后单击 项目
  3.  项目类型 框中,单击 Visual C# 项目,然后单击 模板 下的 控制台应用程序

    注意
    在 Visual Studio 2005 或 Visual Studio 2008 单击 Visual C#  项目类型,然后单击模板 下的 控制台应用程序
  4. Class1.cs 文件的开头添加以下代码:
    using System.IO;using System.Text;
    Visual Studio 2005 或 Visual Studio 2008,默认的文件的 注释 是 Program.cs。
  5. 将下面的代码添加到 Main 方法:
Int64 x;try {//Open the FileStreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII);//Writeout the numbers 1 to 10 on the same line.for(x=0; x < 10; x++){sw.Write(x);}//close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}



  1.  调试 菜单上单击编译并运行该应用程序,请 开始。此代码创建一个命名 Test1.txt 为驱动器 c。 打开 Test1.txt 在文本编辑器 (如记事本) 上的文件。Test1.txt 包含单行文本:
    0123456789

完成代码列表

  • 读取文本文件
//Read a Text Fileusing System;using System.IO;namespace readwriteapp{class Class1{[STAThread]static void Main(string[] args){String line;try {//Pass the file path and file name to the StreamReader constructorStreamReader sr = new StreamReader("C:\\Sample.txt");//Read the first line of textline = sr.ReadLine();//Continue to read until you reach end of filewhile (line != null) {//write the lie to console windowConsole.WriteLine(line);//Read the next lineline = sr.ReadLine();}//close the filesr.Close();Console.ReadLine();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}}}}


  • 写文本文件 (版本 1)
//Write a text file - Version-1using System;using System.IO;namespace readwriteapp{class Class1{[STAThread]static void Main(string[] args) {try {//Pass the filepath and filename to the StreamWriter ConstructorStreamWriter sw = new StreamWriter("C:\\Test.txt");//Write a line of textsw.WriteLine("Hello World!!");//Write a second line of textsw.WriteLine("From the StreamWriter class");//Close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}}}}


  • 写文本文件 (版本 2)
//Write a text file  - Version 2using System;using System.IO;using System.Text;namespace readwriteapp{class Class1{[STAThread]static void Main(string[] args) {   Int64 x;try {//Open the FileStreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII);//Writeout the numbers 1 to 10 on the same line.for(x=0; x < 10; x++){sw.Write(x);}//close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}}}}



疑难解答

对于所有的文件操作,它是一个良好的编程习惯来包装中 一次尝试-catch-finally 程序块来处理错误和异常代码。专门,您可能希望释放最后块中文件的句柄,使该文件未被无限期锁定。一些可能的错误包括一个文件不存在或已在使用中的文件。

http://support.microsoft.com/kb/816149/zh-cn


用filestream 读和写.

        /// <summary>        /// 复制文件        /// </summary>        /// <param name=\"fromFile\">要复制的文件</param>        /// <param name=\"toFile\">要保存的位置</param>        /// <param name=\"lengthEachTime\">每次复制的长度</param>        private void CopyFile(string fromFile, string toFile, int lengthEachTime)        {            FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);            FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);            int lengthToCopy;            if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度            {                byte[] buffer = new byte[lengthEachTime];                int copied = 0;                while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分                {                    lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);                    fileToCopy.Flush();                    copyToFile.Write(buffer, 0, lengthEachTime);                    copyToFile.Flush();                    copyToFile.Position = fileToCopy.Position;                    copied += lengthToCopy;                }                int left = (int)fileToCopy.Length - copied;//拷贝剩余部分                lengthToCopy = fileToCopy.Read(buffer, 0, left);                fileToCopy.Flush();                copyToFile.Write(buffer, 0, left);                copyToFile.Flush();            }            else//如果整体拷贝,即每次拷贝内容大于文件总长度            {                byte[] buffer = new byte[fileToCopy.Length];                fileToCopy.Read(buffer,0,(int)fileToCopy.Length);                fileToCopy.Flush();                copyToFile.Write(buffer, 0, (int)fileToCopy.Length);                copyToFile.Flush();            }            fileToCopy.Close();            copyToFile.Close();        }


原创粉丝点击