您的位置:首页 > 其它

文件,文件夹,文件流,日志文件写入记事本

2013-07-24 10:49 183 查看
对于文件和文件夹的操作都很简答,由于他们都有静态方法,所以使用起来很方便,下面直接贴方法吧,一看便知

一、文件操作: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();
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: