对于文件和文件夹的操作都很简答,由于他们都有静态方法,所以使用起来很方便,下面直接贴方法吧,一看便知
一、文件操作:File类(FileInfo类是用来定义文件属性)
方 法 说 明
Copy() 将文件从源位置复制到目标位置
Create() 在指定的路径上创建文件
Delete() 删除文件
Open() 返回指定路径上的FileStream对象
Move() 将指定的文件移动到新位置。可以在新位置为文件指定不同的名称
二、文件夹操作:Directory类(DirectoryInfo使用来定义文件夹属性)
方 法 说 明
CreateDirectory() 创建具有指定路径的目录
Delete() 删除指定的目录及其中的所有文件
GetDirectories() 返回表示指定目录下的目录名的string对象数组
EnumerateDirectories() 与GetDirectories()类似,但返回IEnumerable<string>集合
GetFiles() 返回在指定目录中的文件名的string对象数组
EnumerateFiles() 与GetFiles()类似,但返回文件名的IEnumerable<string>集合
GetFileSystemEntries() 返回在指定目录中的文件和目录名的string对象数组
EnumerateFileSystemEntries() 与GetFileSystemEntries()类似,但返回文件和目录名的IEnumerable<string>集合
Move() 将指定的目录移到新位置。可以在新位置为文件夹指定一个新名称
三、下面讲最重要的部分文件流<Stream>
在众多stream中功能最全面的要数FileStream,then what is fileStream
FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的
法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字
和字节数组,而Stream类操作的是字符数据。字符数据易于使用,但是有些操作,如随机文件访
(访问文件中间某点的数据),就必须由FileStream执行,稍后对此进行介绍。
还有几种方法可以创建FileStream对象。构造函数具有许多不同的重载版本,最简单的构造
数仅有两个参数,即文件名和FileMode枚举值。
FileStream aFile = new FileStream(filename, FileMode.<Member>);
FileMode枚举包含几个成员,指定了如何打开或创建文件。稍后介绍这些枚举成员。另一个常
用的构造函数如下:
FileStream aFile = new FileStream(filename, FileMode.<Member>, FileAccess.<Member>);
第三个参数是FileAccess枚举的一个成员,它指定了流的作用。FileAccess枚举的成员如下所示。
成 员 说 明
Read 打开文件,用于只读
Write 打开文件,用于只写
ReadWrite 打开文件,用于读写
对文件进行非FileAccess枚举成员指定的操作会导致抛出异常。此属性的作用是,基于用户的
身份验证级别改变用户对文件的访问权限。
在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess.ReadWrite。
FileMode枚举成员如表21-8所示。使用每个值会发生什么,取决于指定的文件名是否表示已
有的文件。注意,这个表中的项表示创建流时该流指向文件中的位置,下一节将详细讨论这个主题。
除非特别说明,否则流就指向文件的开头。
Append 打开文件,流指向文件的末尾。只能与枚举
FileAccess.Write 结合使用 创建一个新文件。只能与枚举
FileAccess.Write 结合使用
Create 删除该文件,然后创建新文件 创建新文件
CreateNew 抛出异常 创建新文件
Open 打开现有的文件,流指向文件开头 抛出异常
OpenOrCreate 打开文件,流指向文件开头 创建新文件
Truncate 打开现有文件,清除其内容,流指向文件开头,保留文件的初始创建日期抛出异常
FileStream使用的方法有很多,如:Seek,peek,read等等下面举例分别说明:
Example1: 结合StreamReader,StreamWriter读取文件夹,写文件(read,readline,readblock,readtoend)
private static void fileStreamTest()
{
string filePath = "../../sss.cs";
char[] charArray = new char[20];
byte[] byteArray = new byte[20];
Console.WriteLine("<----------------addWord--------------------------------->");
string addString = "abcdefg";
using (FileStream stream2 = new FileStream(filePath, FileMode.Append, FileAccess.Write))
{
StreamWriter write = new StreamWriter(stream2);
write.WriteLine(addString);
write.Flush();
Console.WriteLine("success!");
}
Console.WriteLine("<----------------ReadWord--------------------------------->");
using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd().ToString());
}
}
Console.WriteLine("<----------------Read(decoding)--------------------------------->");
using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(stream))
{
reader.Read(charArray, 0, 20);
string content = string.Empty;
foreach (int i in charArray)
content += (char)i;
Console.WriteLine(content);
}
}
Console.WriteLine("<----------------ReadBlockWord--------------------------------->");
using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(stream))
{
reader.ReadBlock(charArray, 0, 20);
string content = string.Empty;
foreach (int i in charArray)
content += (char)i;
Console.WriteLine(content);
}
}
Console.WriteLine("<----------------SeekWord--------------------------------->");
using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
Console.WriteLine("positon now is:" + (int)stream.Position);
stream.Seek(1000, SeekOrigin.Current);
Console.WriteLine("positon changed:" + stream.Position);
StreamReader reader = new StreamReader(stream);
Console.WriteLine("left word afer seek" + reader.ReadToEnd());
}
}
Example2:txt文件中是有用逗号分开的类似excel数据的操作
public void Text()
{
try
{
// List<String> head = new List<string>();
string[] stringArray=new string[3];
string[] bodyArray = new string[3];
List<Dictionary<string, string>> listContent = new List<Dictionary<string, string>>();
FileStream stream = new FileStream("../../file.txt",FileMode.Open,FileAccess.Read);
StreamReader reader = new StreamReader(stream);
stringArray=reader.ReadLine().Split(',');
while (reader.Peek()!=-1)
{
string line = reader.ReadLine();
bodyArray = line.Split(',');
Dictionary<string, string> dic = new Dictionary<string, string>();
for(int i=0;i<3;i++)
{
dic.Add(stringArray[i].ToString(), bodyArray[i].ToString());
}
listContent.Add(dic);
}
foreach(string item in stringArray)
{
Console.Write("{0,-10}",item);
}
Console.WriteLine();
// Dictionary<string, string> diction = new Dictionary<string, string>();
foreach (var diction in listContent)
{
Dictionary<string, string> item=( Dictionary<string, string>)diction;
foreach (var i in item)
{
Console.Write("{0,-10}",i.Value);
//Console.WriteLine();
}
Console.WriteLine();
}
}
catch
{
}
Console.ReadKey();
}
课本上的方法:
public void UsingFunctionGetData()
{
//取得函数返回的数据
List<string> listHead=new List<string> ();
List<Dictionary<string, string>> data = GetData(out listHead);
foreach (var item in listHead)
{
Console.Write("{0,-10}",item);
}
Console.WriteLine();
foreach (Dictionary<string,string> item in data)
{
//foreach (var single in item)
//{
// Console.Write("{0,-10}",single.Value);
//}
foreach (string singel in listHead)
{
Console.Write("{0:-10}",item[singel]);
}
Console.WriteLine();
}
Console.WriteLine();
Console.ReadKey();
}
private List<Dictionary<string, string>> GetData(out List<string> colums)
{
using(FileStream stream=new FileStream ("../../file.txt",FileMode.Open,FileAccess.Read))
{
using(StreamReader reader=new StreamReader (stream))
{
string head = string.Empty; //文件头部信息
string[] stringArray = null;
char[] splitCharArray = new char[] { ','}; //分割符号集合
colums =new List<string>();
head=reader.ReadLine(); //获取第一行
stringArray = head.Split(splitCharArray);
//getUpperBound 获取stringArray维度的上限(不懂)
for (int i = 0; i <= stringArray.GetUpperBound(0); i++)
{
colums.Add(stringArray[i]); //获取返回的头部信息
}
//声明返回数据的List类型
List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();
string nextLine = string.Empty;
//当下一行非空时
while (reader.Peek() != -1)
{
nextLine = reader.ReadLine();
stringArray = nextLine.Split(splitCharArray);
//声明单个字典对象
Dictionary<string, string> singleDic = new Dictionary<string, string>();
for(int j=0;j<=stringArray.GetUpperBound(0);j++)
{
singleDic.Add(colums[j], stringArray[j]);
}
data.Add(singleDic);
}
return data;
}
}
}
最后用一个比较综合的例子结尾:我们平时在做系统时要写日志文件,有时我们直接将文件写道txt文件中.(因为是学习,例子有点乱,我尽量多写点注释,解释我的意图)
class DerectoryTest
{
public void CreateDrecotory()
{
try
{//创建文件夹
if (!Directory.Exists("../../newDirectory1"))
{
Console.WriteLine("not exit!");
Directory.CreateDirectory("../../newDirectory1");
Console.Write("create sucess");
}
else
Console.WriteLine("directory exit");
}
catch(IOException e)
{
Console.Write("something wrong in your code!");
}
Console.ReadKey();
}
public void WriteLog()
{
try {
string day = DateTime.Now.ToString("yyyy-MM") ; //文件夹名
string logName = DateTime.Now.ToString("yyyy-MM-dd")+".txt"; //日志文件名,以天为一个文件
//create a directory named by day
if (!Directory.Exists(day)) //创建日志文件夹(以月为一个文件夹)
Directory.CreateDirectory("../../"+day);
//创建一个FileStream对象(这步来看当前文件是否有数据)
using (FileStream fs = new FileStream("../../"+day+"/"+logName, FileMode.Open, FileAccess.ReadWrite))
{
using (StreamReader reader = new StreamReader(fs))
{
string contents = reader.ReadToEnd();
Console.WriteLine(contents);
}
}
//写文件(test)往下看
using (FileStream fs = new FileStream("../../" + day + "/" + logName, FileMode.Append, FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(fs))
{
string content = string.Empty;
content += "------------------" + DateTime.Now.ToString() + "-------------------------\n";
content += "nice to meet you ,welcome visited this directory and write \n";
content += "good luck \n";
writer.Write(content);
}
}
}
catch(IOException e)
{
Console.WriteLine(e.InnerException+"\n"+e.Message);
}
Console.ReadKey();
}
public void DeleteDirectoryOrFile()
{
//删除一个文件一个文件夹
try {
Directory.Delete("../../newDirectory1");
File.Delete("../../2013-07log.txt");
}
//如果有错报错,并写入日志文件
catch(IOException e)
{
using (FileStream fs = new FileStream("../../2013-07/2013-07-24.txt", FileMode.Append, FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(fs))
{
string content = "-----------------"+DateTime.Now.ToString()+"---------------------\n\r";
content += "\n\r";
content+=e.InnerException+"\n\r"+e.Message+"\n\r"+e.StackTrace+"\n\r";
content += "\n\r"; //换行符
writer.Write(content);
Console.WriteLine("error");
}
}
}
Console.ReadKey();
}
}