DetailPage-MSS-KB

知识库

文章编号: 306777 - 最后修改: 2014年2月9日 - 修订: 11.0

 
这篇文章的 Microsoft Visual Basic.NET 版本,请参阅 302309  (http://support.microsoft.com/kb/302309/ ) .

这篇文章是指以下 Microsoft.NET Framework 类库命名空间:
  • System.IO
  • System.Collections

本页

概要

本分步指南介绍了如何从一个文本文件 (.txt) 文件,检索信息,然后使用ArrayList类向用户显示该信息。

要求

Microsoft Visual C#

在Visual C#中读取文本文件

打开和读取文件进行读取访问是输入/输出 (IO) 功能的一个重要部分,即使您不需要写入到所讨论的文件。本示例打开一个文件进行读取,这对读取文本文件有用,但不适用于二进制文件。此示例使用多个可用于打开该文件的方法之一。

虽然很多数据结构都可以用于存储从文件中检索的信息, ArrayList类是使用最简便的结构。要打开并读取文件,此示例使用System.IO命名空间中,特别是在System.IO.StreamReader类中的对象。

注意此示例需要某种形式的从中读取的文本 (.txt) 文件。

若要加载并读取整个文本文件从 Visual C# 中,请按照下列步骤操作:
  1. 开始 Microsoft Visual Studio。
  2. 创建新的控制台应用程序中可视化 C#。Visual Studio 创建静态的类,以及一个空的main ()过程。
  3. 请验证该项目至少引用System命名空间。针对系统System.IOSystem.Collections的名称空间使用using语句,这样,您不需要从这些以后在代码中的命名空间中限定声明。您必须使用这些语句在任何其他声明之前。
    using System;
    using System.IO;
    using System.Collections;
    					
  4. 若要打开一个文件进行读取,请创建StreamReader对象的一个新实例,并将该文件的路径传递到构造函数,如下所示:
    StreamReader objReader = new StreamReader("c:\\test.txt");
    					
  5. 您必须具有字符串变量,以便在处理时将文件的每一行都存储到该变量中。因为您会将把这些行添加到一个ArrayList,请另外声明并还创建该类型的对象。
    string sLine="";
    ArrayList arrText = new ArrayList();
    					
  6. 有几种方法可以读取文件,同时在整个文件中包括它读取ReadToEnd方法。但是,对于此示例,您可以使用ReadLine方法,每次使文件的一行中。当达到文件结尾时,此方法将返回空值,这提供了一种方法可以用于结束循环。当从文件中读取每一行,可以使用数组列表Add方法将行插入ArrayList类。
    while (sLine != null)
    {
    	sLine = objReader.ReadLine();
    	if (sLine != null)
    		arrText.Add(sLine);
    }
    objReader.Close();
    					
  7. 使用For Each循环,如下所示的您新填充数组列表内容写入到控制台:
    foreach (string sOutput in arrText)
    	Console.WriteLine(sOutput);
    Console.ReadLine();
    					
  8. 保存并运行您的代码,它将生成您在控制台的文件的列表。

完整的代码列表

using System;
using System.IO;
using System.Collections;

namespace TextFileReader_csharp
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Class1
	{
		static void Main(string[] args)
		{
			StreamReader objReader = new StreamReader("c:\\test.txt");
			string sLine="";
			ArrayList arrText = new ArrayList();

			while (sLine != null)
			{
				sLine = objReader.ReadLine();
				if (sLine != null)
					arrText.Add(sLine);
			}
                        objReader.Close();

			foreach (string sOutput in arrText)
				Console.WriteLine(sOutput);
			Console.ReadLine();
		}
	}
}
				

故障排除

有几点需要注意的是当您在使用文件 i/o 操作包括以下各项:
  • 无论何时访问某个文件,则可能会想要读取或写入的文件可能不在系统上或可能正在使用。
  • 本示例将整个文件读入内存,在处理文件之前。您可能会遇到文件太大,无法保留在内存中的情况,或者您可能没有权限访问该文件。
任何这些情况会导致引发异常。它始终是很好的做法提供了一个try...catch块,以处理这些常见的问题。

这篇文章中的信息适用于:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Visual C# 2008 Express Edition
关键字: 
kbcollections kbhowtomaster kbio kbmt KB306777 KbMtzh
机器翻译机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 306777  (http://support.microsoft.com/kb/306777/en-us/ )
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
其他支持选项
Microsoft Community 支持论坛
直接联系我们
查找 Microsoft 认证合作伙伴
Microsoft 商店