C#学习记录(43)Windows应用程序基础之文件系统数据

一.流

     在.NET Framework 中进行的所有输入和输出工作都要用到流(stream)。流是序列化设备(serialdevice)的抽象表示。序列化设备可以以线性方式存储数据,并可以按同样的方式访问:一次访问一个字节。

有两种类型的流:
输出流:当向某些外部目标写入数据时,就要用到输出流。这可以是物理磁盘文件、网络位置、打印机或另一个程序。理解流编程技术可以带来许多高级应用。本章仅讨论文件系统数据,所以只介绍写入磁盘文件。
 

输入流:用于将数据读入程序可以访问的内存或变量中。到目前为止,我们使用的最常见的输入流形式是键盘。输入流可以来自任何源,在此主要关注读取磁盘文件。适用于读/写磁盘文件的概念也适用于大多数设备,因此通过本章的学习,我们就会对流有基本的认识,并学习可以应用于许多情况的有效方法。

 

二.用于输入和输出的类

类                                                说 明
File             静态实用类,提供许多静态方法,用于移动、复制和删除文件
Directory    静态实用类,提供许多静态方法,用于移动、复制和删除文件

Path           实用类,用于处理路径名称
FileInfo       表示磁盘上的物理文件,该类包含处理此文件的方法。要完成对文件的读写工作,就必须创建Stream 对象
DirectoryInfo         表示磁盘上的物理目录,该类包含处理此目录的方法
FileSystemInfo      用作FileInfo 和DirectoryInfo 的基类,可以使用多态性同时处理文件和目录
FileStream            表示可写或可读,或二者均可的文件。此文件可以同步或异步地读写
StreamReader      从流中读取字符数据,可以使用FileStream 将其创建为基类
StreamWriter        向流写入字符数据,可以使用FileStream 将其创建为基类
FileSystemWatcher        FileSystemWatcher 是本章要介绍的最复杂的类。它用于监控文件和目录,提供了这些文件和目录发生变化时应用程序可以捕获的事件,在Windows 编程技术中缺乏此功能,但是现在.NET很容易对文件系统事件作出响应

 

三.File类和Directory类

File 类的一些最常用的静态方法如表所示。
方 法                 说 明
Copy()          将文件从源位置复制到目标位置
Create()       在指定的路径上创建文件
Delete()        删除文件
Open()          返回指定路径上的FileStream 对象
Move()          将指定的文件移动到新位置。可以在新位置为文件指定不同的名称

Directory 类的一些常用的静态方法如表所示。

方 法                                说 明
CreateDirectory()        创建具有指定路径的目录
Delete()                       删除指定的目录及其中的所有文件
GetDirectories()          返回表示指定目录下的目录名的string 对象数组
EnumerateDirectories()            与GetDirectories()类似,但返回IEnumerable<string>集合
GetFiles()                               返回在指定目录中的文件名的string 对象数组
EnumerateFiles()                   与GetFiles()类似,但返回文件名的IEnumerable<string>集合
GetFileSystemEntries()         返回在指定目录中的文件和目录名的string 对象数组
EnumerateFileSystemEntries()          与GetFileSystemEntries()类似,但返回文件和目录名的IEnumerable<string>集合
Move()                                将指定的目录移到新位置。可以在新位置为文件夹指定一个新名称

 

四,FileInfo类

           FileInfo 类不像File 类,它不是静态的,没有静态方法,仅可用于实例化的对象。FileInfo 对象表示磁盘或网络位置上的文件。提供文件路径,就可以创建一个FileInfo 对象:
           FileInfo aFile = new FileInfo(@"C:\Log.txt");

五.路径名和相对路径

        相对路径名相对于一个起始位置。使用相对路径名时,无需规定驱动器或已知的位置;前面的当前工作目录就是起点, 这是相对路程名的默认设置。例如, 如果应用程序运行在C:\Development\FileDemo 目录上, 并使用相对路径LogFile.txt , 该文件就是C:\Development\FileDemo\LogFile.txt。为了上移目录,要使用..字符串。这样,在同一个应用程序中,路径..\Log.txt 表示C:\Development\Log.txt 文件。

      只要需要,就可以使用Directory.GetCurrentDirectory()找出工作目录的当前设置,也可以使用Directory.SetCurrentDirectory()设置新路径。

 

六.FileStream对象

FileStream 对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方
法,但经常使用StreamReader 或StreamWriter 执行这些功能。

FileStream aFile = new FileStream(filename, FileMode.<Member>, FileAccess.<Member>);

(1)FileMode

成 员               文 件 存 在                                                    文件不存在
Append           打开文件, 流指向文件的末尾。               创建一个新文件。只能与枚举FileAccess.Write 结合使用

                   只能与枚举FileAccess.Write 结合使用


Create            删除该文件,然后创建新文件                                   创建新文件
CreateNew             抛出异常                                                           创建新文件
Open                       打开现有的文件,流指向文件开头                   抛出异常
OpenOrCreate      打开文件,流指向文件开头                                创建新文件
Truncate     打开现有文件,清除其内容,流指向文件开头,          抛出异常

                   保留文件的初始创建日期
 

(2)FileAccess

成 员                     说 明
Read                    打开文件,用于只读
Write                    打开文件,用于只写
ReadWrite           打开文件,用于读写

获取文件位置:   aFile.Seek(113, SeekOrigin.Begin);
读取数据:          aFile.Read(byData, 0, 200);

 

byte[] byData;
char[] charData;

FileStream aFile = new FileStream("Temp.txt", FileMode.Create);   ///新建文件流
charData = "My pink half of the drainpipe.".ToCharArray();   将string转换成字符数组
byData = new byte[charData.Length];       获取字符数组的字节数
Encoder e = Encoding.UTF8.GetEncoder();     基于UTF-8 编码方法来创建Encoder 对象
e.GetBytes(charData, 0, charData.Length, byData, 0, true);  
// 移动指针到最开始的位置
aFile.Seek(0, SeekOrigin.Begin);
aFile.Write(byData, 0, byData.Length);写入数据

  

七.StreamWriter对象与StreamReader对象

如果已经有了FileStream 对象,就可以使用此对象来创建StreamWriter 对象:
              FileStream aFile = new FileStream("Log.txt", FileMode.CreateNew);
              StreamWriter sw = new StreamWriter(aFile);
也可以直接从文件中创建StreamWriter 对象:
              StreamWriter sw = new StreamWriter("Log.txt", true);

这个构造函数的参数是文件名和一个Boolean 值,这个Boolean 值规定是追加文件,还是创建新文件:
 如果此值设置为false,则创建一个新文件,或者截取现有文件并打开它。
 如果此值设置为 true,则打开文件,保留原来的数据。如果找不到文件,则创建一个新文件。

///写入数据到文件中

{

   FileStream aFile = new FileStream("Log.txt", FileMode.OpenOrCreate);
   StreamWriter sw = new StreamWriter(aFile);
   bool truth = true;
   // 写入数据到文件中
   sw.WriteLine("Hello to you.");
   sw.WriteLine("It is now {0} and things are looking good.",
   DateTime.Now.ToLongDateString());

   sw.Write("More than that,");
   sw.Write(" it’s {0} that C# is fun.", truth);
   sw.Close();
}

//读取文件数据

{
FileStream aFile = new FileStream("Log.txt", FileMode.Open);
StreamReader sr = new StreamReader(aFile);
line = sr.ReadLine();
// 按行读取出数据
while (line != null)
{
    Console.WriteLine(line);
    line = sr.ReadLine();
}
  sr.Close();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值