关于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();
}
}
}