• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#使用FileStream类从文本中读数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。

一、创建FileStream对象
1、FileStream对象最简单的构造函数仅仅带有两个参数,即文件名和FileMode枚举值。

FileStream aFile = new FileStream(filename, FileMode);

 

2、另一个常用的构造函数如下:
FileStream aFile = new FileStream(filename, FileMode, FileAccess);

三个参数的意义分别为:filename文件名,FileMode枚举类型,表示如何打开文件的模式。FileAccess也是枚举类型,用于改变对用户的访问权限。

FileMode枚举成员:
使用每个值会发生什么,取决于指定的文件名是否表示已有的文件。注意创建流时该流指向文件中的位置,除非特别说明,否则流就指向文件的开头。

Append
文件存在打开文件,当前位置指向文件的末尾,只能与枚举FileAccess.Write联合使用。文件不存在创建新文件。

Create
文件存在删除该文件,然后创建新文件。文件不存在创建新文件。

CreateNew
文件存在抛出异常,文件不存在创建新文件。

Open
文件存在打开现有的文件,流指向文件的开头。文件不存在抛出异常

OpenOrCreate
文件存在打开文件,流指向文件的开头。文件不存在创建新文件并打开

Truncate
打开现有文件,清除其内容。流指向文件的开头,保留文件的初始创建日期。文件不存在抛出异常。

FileAccess枚举成员:

Read
打开文件,用于只读

Write
打开文件,用于只写

ReadWrite
打开文件,用于读写

对文件进行不是FileAccess枚举成员指定的操作会导致抛出异常。此属性的作用是,基于用户的身份验证级别改变用户对文件的访问权限。

在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess. ReadWrite。

3、创建FileStream对象,不必以FileStream构造函数的参数形式提供前面所有的信息。File和FileInfo类都提供了OpenRead()和OpenWrite()方法,更易于创建FileStream对象。前者打开了只读访问的文件,后者只允许写入文件。

我们回顾一下:
Open方法打开文件,返回文件流FileStream对象。
OpenRead方法打开现有文件来读取数据,返回只读流FileStream对象。
OpenWrite方法打开现在文件以进行写入,返回只写不共享的FileStream对象。

例如,下面的代码行打开了用于只读访问的Text.txt文件:

FileStream aFile = File.OpenRead("Test.txt");

注意下面的代码执行同样的功能:

FileInfo aFileInfo = new FileInfo("Test.txt");
FileStream aFile = aFile.OpenRead();

 

二、读取数据
使用FileStream类读取数据不像StreamReader类读取数据那样容易。这是因为FileStream类只能处理原始字节(raw byte)。处理原始字节的功能使FileStream类可以用于任何数据文件,而不仅仅是文本文件。通过读取字节数据,FileStream对象可以用于读取图像和声音的文件。这种灵活性的代价是,不能使用FileStream类将数据直接读入字符串,而使用StreamReader类却可以这样处理。但是有几种转换类可以很容易地将字节数组转换为字符数组,或者进行相反的操作。

FileStream.Read()方法是从FileStream对象所指向的文件中访问数据的主要手段。这个方法从文件中读取数据,再把数据写入一个字节数组。它有三个参数:第一个参数是传输进来的字节数组,用以接受FileStream对象中的数据。第二个参数是字节数组中开始写入数据的位置。它通常是0,表示从数组开端向文件中写入数据。最后一个参数指定从文件中读出多少字节。

下面我们看实例:

using System;
using System.Text;
using System.IO;
class Program
{
static void Main()
{
   Console.WriteLine("要输入要读取的路径,指定路径的完整名称");
   string path = Console.ReadLine();
   try
   {
    if (File.Exists(path))
    {
     FileStream fs = File.OpenRead(path);
     byte[]str = new byte[200];
     while (fs.Read(str, 0, str.Length) > 0)
     {
      Console.WriteLine(System.Text.Encoding.Default.GetString(str));
     }
     fs.Close();
    }
    else
     Console.WriteLine("该文件不存在");
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex.Message);
   }
   Console.ReadLine();
}
}

从键盘接收文件路径,然后使用Exits方法判断文件是否存在,如果存在,则使用FileStream类的OpenRead方法打开并读取,将读到的数据存放在字节数组中,然后将字节按默认编码方式解码成字符串并输出到控制台。流不使用时,一定要及时关闭。fs.Close()关闭流。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
04737_C++程序设计_第7章_类模板与向量发布时间:2022-07-14
下一篇:
c++变量作用域发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap