关于C#文件类的应用(二)
使用DirectoryInfo类操作文件夹
方法 |
说明 |
Attributes |
获取或设置当前FileSystemInfo的FileAttributes |
CreationTime |
获取或设置当前FileSystemInfo对象的创建时间 |
Exists |
获取指示目录是否存在的值 |
Extension |
获取表示文件扩展名部分的字符串 |
Name |
获取此DirectoryInfo实例的名称 |
Parent |
获取指定子目录的父目录 |
Root |
获取路径的根部分 |
应用实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //记得添加对System.IO的引用。
namespace 文件类的应用
{
class Program
{
static void Main(string[] args)
{
string m_path = @"C:/Documents and Settings/张健和/桌面/Roy";
DirectoryInfo useDirectoryInfo = new DirectoryInfo(m_path); //用DirectoryInfo时记得要新建实例
if (useDirectoryInfo.Exists) //与Directory类不同,这里Exists不是方法
{
Console.WriteLine("文件夹存在");
}
else
{
Console.WriteLine("文件夹不存在,系统自动新建文件夹");
Directory.CreateDirectory(m_path);
}
string a = useDirectoryInfo.Attributes.ToString(); //文件夹类型
string ct = useDirectoryInfo.CreationTime.ToString(); //创建时间
string name = useDirectoryInfo.Name.ToString(); //文件名称
string P=useDirectoryInfo.Parent.ToString(); //文件的父目录
string R = useDirectoryInfo.Root.ToString(); //文件夹的根目录
Console.WriteLine(
"文件夹类型是:" + a
+ "/n创建时间是:" + ct
+ "/n文件夹名称是:" + name
+ "/n文件的父目录是:" + P
+ "/n文件夹的根目录是:" + R);
Console.ReadLine();
}
}
}
使用FileStream类读取和写入文件
FileStream类的构造函数简介
构造函数 |
说明 |
FileStream(String.FileMode) |
使用指定的路径和创建模式初始化FileStream类的新实例 |
FileStream(String.FileMode,FileAccess) |
使用指定的路径、创建模式和读/写权限初始化FileStream类的新实例 |
FileMode枚举成员简介
成员 |
说明 |
Append |
打开现有文件并查找到文件尾,或创建新文件。FileMode.Append只能同FileAccess一起使用,任何读尝试都会失败并引发<ArgumentException> |
Create |
指定操作系统应创建文件。如果文件存在,它将被改写。这要求<FileIOPermissionAccess.Write>,System.IO.FileMode.Create等效于这样的请求:如果文件不存在,则使用<CreateNew>;否则使用<Truncate>。 |
CreateNew |
指定操作系统应创建文件。此操作需要FileIOPermissionAccess.Write。如果文件已经存在,则将引发IOException |
Open |
指定操作系统应打开现有文件。打开文件的能力取决于FileAccess所指定的值。如果该文件不存在,则引发System.IO.FileNotFoundException。 |
OpenOrCreate |
如果文件存在,指定操作系统应打开文件,否则应创建文件。如果用FileAccess.Read打开文件,则需要<FileIOPermissionAccess.Read>。如果文件访问为FileAccess.Write或FileAccess.ReadWrite,则需要FileIOPermissionAccess.Write。如果文件访问为FileAccess.Append,则需要<FileIOPermissionAccess.Append>。 |
Truncate |
指定操作系统应打开现有文件。文件一旦打开,就将被截断为零字节大小。此操作需要FileIOPermissionAccess.Write。试图从使用Truncate打开的文件中进行读取将导致异常。 |
(由于本人不太推荐用FileStream类进行文件操作,因为比较影响效率,所以以下的应用实例不是太全面)
应用实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //记得添加对System.IO的引用。
namespace 文件类的应用
{
class Program
{
static void Main(string[] args)
{byte[] m_bDateWrite = new byte[100];
char[] m_cDateWrite = new char[100];
string m_path = @"C:/Documents and Settings/张健和/桌面/Roy.txt";
try
{
//创建c:/的FileStream对象
FileStream m_FileStream = new FileStream(m_path, FileMode.OpenOrCreate, FileAccess.ReadWrite);
m_cDateWrite = "My First File Operation".ToCharArray(); //将要写入的字符串转换成字符数组
//通过UTF-8编码方法将字符数组转换成字节数组(自己百度一下什么是UTF-8)
Encoder m_Enc = Encoding.UTF8.GetEncoder();//?
m_Enc.GetBytes(m_cDateWrite, 0, m_cDateWrite.Length, m_bDateWrite, 0, true);
m_FileStream.Seek(0, SeekOrigin.Begin); //设置流的当前位置为文件开始位置
m_FileStream.Write(m_bDateWrite, 0, m_bDateWrite.Length); //写入文件
}
catch (System.Exception ex)
{
Console.WriteLine("there is an ioException");
Console.WriteLine(ex.Message); //异常信息
Console.ReadLine(); return;
}
Console.WriteLine("write to File Succeed!");
Console.ReadLine();
return;
}
}
}
使用StreamWriter类写入文件
构造函数 |
说明 |
StreamWriter(Stream) |
用UTF-8编码及默认缓冲区大小,为指定的流初始化StreamWriter类的一个新实例 |
StreamWriter(String) |
使用默认编码和缓冲区大小,为指定路径上的指定文件初始化StreamWriter类的新实例 |
StreamWriter(String,Boolean) |
使用默认编码和缓冲区大小,为指定路径上的指定文件初始化StreamWriter类的新实例。如果文件存在,则可以将其必定或向其追加。如果不存在,则此构造函数将创建一个新文件 |
StreamWriter方法
方法 |
说明 |
Close |
关闭当前的StreamWriter对象和基础流 |
Write |
写入流 |
WriteLine |
写入重载参数指定的某些数据,后跟行结束符 |
应用实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //记得添加对System.IO的引用。
namespace 文件类的应用
{
class Program
{
static void Main(string[] args)
{try
{
string m_path = @"C:/Documents and Settings/张健和/桌面/Roy.txt";
//保留文件现有数据,以追加写入的方式打开文件
StreamWriter sw = new StreamWriter(m_path, true);
sw.WriteLine("Another File Operation Method");
sw.Close();
}
catch (System.Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
return;
}
Console.WriteLine("Write to File Succeed!");
Console.ReadLine();
return;
}
}
}
使用StreamReader类读取文件
构造函数 |
说明 |
StreamReader(Stream) |
为指定的流初始化StreamReader类的新实例 |
StreamReader(String) |
为指定的文件名初始化StreamReader类的新实例 |
StreamReader方法
方法 |
说明 |
Close |
关闭StreamReader对象和基础流,并释放与读取器关联的所有资源 |
Read |
读取输入流中的下一个字符或下一个组字符 |
ReadLine |
从当前流中读取一行字符并将数据作为字符串返回 |
ReadToEnd |
从流当前位置到末尾读取流 |
使用方法和StreamWriter差不多,大家可以尝试尝试自己写一个DEMO。
使用BinaryWriter类进行二进制写入
构造函数 |
说明 |
BinaryWriter() |
初始化向流中写入BinaryWriter类的实例 |
BinaryWriter(Stream) |
基于所提供的流,用UTF-8作为字符串编码来初始化BinaryWriter类的新实例 |
BinaryWriter(Stream,Encoding) |
基于所提供的流和特定的字符编码,初始化BinaryWriter类的新实例 |
BinaryWriter方法
方法 |
说明 |
Close |
关闭当前的BinaryWriter对象和基础流 |
Write |
将值写入当前流 |
使用BinaryReader类进行二进制读取
构造函数 |
说明 |
BinaryReader(Stream) |
基于所提供的流,用UTF-8 Encoding初始化BinaryReader类的新实例 |
BinaryReader(Stream,Encoding) |
基于所提供的流和特定的字符编码,初始化BinaryReader类的新实例 |
BinaryReader方法
方法 |
说明 |
Close |
关闭当前阅读器及基础流 |
Read |
从基础流中读取字符,并提升流的当前位置 |
BinaryWriter和BinaryReader的应用实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //记得添加对System.IO的引用。
namespace 文件类的应用
{
class Program
{
static void Main(string[] args)
{string m_path = @"C:/Documents and Settings/张健和/桌面/Roy.dat";
FileStream FS = new FileStream(m_path, FileMode.OpenOrCreate);
BinaryWriter BW = new BinaryWriter(FS); //通过文件流创建相应的二进制写入器
for (int i = 0; i < 11;i++ )
{
BW.Write(i);
}
BW.Close(); //先关闭
FS.Close();
Console.WriteLine("写入成功!");
Console.ReadLine();
FileStream FS1 = new FileStream(m_path, FileMode.Open, FileAccess.Read);
BinaryReader BR = new BinaryReader(FS1);
for (int i = 0; i < 11;i++ )
{
Console.WriteLine(BR.ReadInt32());
}
BR.Close();
FS.Close();
Console.ReadLine();
}
}
}