当前位置:编程学习 > C#/ASP.NET >>

C#文件/目录处理 以及 文件的读写

一. 文件处理
 
C#提供了File和FileInfo类来进行文件处理,两者的区别是File不能实例化,只提供静态的方法,适合执行单次的操作,而FileInfo可以实例化;
 
 
 
1. 获取文件信息(不包含子目录):
 
FileInfo myfile = new FileInfo("c:\\abc.txt");
 
Console.WriteLine(myfile.Attributes);//属性
 
Console.WriteLine(myfile.CreationTime);//创建时间
 
Console.WriteLine(myfile.CreationTimeUtc);//Utc时间
 
Console.WriteLine(myfile.Directory);//目录
 
Console.WriteLine(myfile.DirectoryName);//目录名字
 
Console.WriteLine(myfile.Exists);//是否存在
 
Console.WriteLine(myfile.Extension);文件扩展名
 
Console.WriteLine(myfile.FullName);//全名
 
Console.WriteLine(myfile.IsReadOnly);是否只读
 
Console.WriteLine(myfile.LastAccessTime);上次访问
 
Console.WriteLine(myfile.LastAccessTimeUtc);时间
 
Console.WriteLine(myfile.LastWriteTime);上次读入
 
Console.WriteLine(myfile.LastWriteTimeUtc);时间
 
Console.WriteLine(myfile.Length);文件长度
 
Console.WriteLine(myfile.Name);文件名字
 
Console.WriteLine("以上是实例文件的属性");
 
 
 
2. 判断文件是否存在:
 
FileInfo myfile = new FileInfo("c:\\abc.txt");
 
if (!myfile.Exists)//判断文件是否存在
 
    myfile.Create();
 
或者
 
if (!File.Exists("c:\\abc.txt"))
 
    File.CreateText(markinfo.strResultFilePath);//File.Create(markinfo.strResultFilePath);
 
 
 
使用Create函数之后打开文件进行读写,可能会报The Process cannot access the file because it is being used by another process的异常,这是因为该文件生成之后一直被创建进程所占用,直到进程结束,可以将代码改为 
 
File.Create(markinfo.strResultFilePath).Close();
 
 
3. 打开文件,FileMode 和 FileAccess 枚举类型
 
FileMode:
 
 
成    员
 
文 件 存 在
 
文件不存在
 
Append
 
打开文件,流指向文件的末尾,只能与枚举FileAccess.Write联合使用
 
创建一个新文件。只能与枚举FileAccess.Write联合使用
 
Create
 
删除该文件,然后创建新文件
 
创建新文件
 
CreateNew
 
抛出异常
 
创建新文件
 
Open
 
打开现有的文件,流指向文件的开头
 
抛出异常
 
OpenOrCreate
 
打开文件,流指向文件的开头
 
创建新文件
 
Truncate
 
打开现有文件,清除其内容。流指向文件的开头,保留文件的初始创建日期
 
抛出异常
 
 
 
FileAccess:
 
 
成   员
 
说    明
 
Read
 
打开文件,用于只读
 
Write
 
打开文件,用于只写
 
ReadWrite
 
打开文件,用于读写
 
 
 
File和FileInfo类都提供了OpenRead()和OpenWrite()方法,更易于创建FileStream对象。前者打开了只读访 问的文件,后者只允许写入文件:
 
FileStream aFile = File.OpenRead("Data.txt");
或者
 
FileInfo aFileInfo = new FileInfo("Data.txt");
FileStream aFile = aFile.OpenRead();
 
4. 读文件:
 
对文件进行读操作可以通过FileStream:
 
 
FileStream fs = new FileStream("c:\\abc.txt", FileMode.Create, FileAccess.Write);
 
fs.Write("Hello!", 0, "Hello!".Length);
fs.Close();
 
或者通过FileStream和StreamReader的组合:
FileStream fs = new FileStream("c:\\abc.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
try
{
     string strLine = "";
     strLine = sr.ReadLine();
     while(strLine != null)
     {
          string[] linestrs = strLine.Split();
          strLine = sr.ReadLine();
     }
     sr.Close();
     fs.Close();
}
catch (IOException ex)
{
     sr.Close();
     fs.Close();
     throw ex;
}
 
FileStream对象表示在磁盘或网络路径上指向文件的流,操作的是字节和字节数组;
经常使用StreamReader或 StreamWriter执行文件读写的功能,因为Stream类操作的是字符数据,字符数据易于使用;
但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。
 
5. 写文件:
 
FileStream fs = new FileStream("c:\\abc.txt", FileMode.Open);
StreamWriter sw = new StreamWriter(fs);
try
{
     string str = “hello!";
 
     sw.Write( "The 1st Line: ");
     sw.WriteLine(str);
     sw.Close();
     fs.Close();
}
catch (IOException ex)
{
     sw.Close();
     fs.Close();
     throw ex;
}
 
 
 
具体文件定位读写的方法参考下面转载:
 
1. 文件位置
 
FileStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置。在大多数情况下,当打开文件时,它就指向文件的开始位置,但 是此指针可以修改。这允许应用程序在文件的任何位置读写,随机访问文件,或直接跳到文件的特定位置上。当处理大型文件时,这非常省时,因为马上可以定位到 正确的位置。
 
实现此功能的方法是Seek()方法,它有两个参数:第一个参数规定文件指针以字节为单位的移动距离。第二个参数规定开始计算的起始位置,用SeekOrigin枚举的一个值表示。Seek Origin枚举包含3个值:Begin、Current和End。
 
例如,下面的代码行将文件指针移动到文件的第8个字节,其起始位置就是文件的第1个字节:
 
 
 
aFile.Seek(8,SeekOrigin.Begin);
下面的代码行将指针从当前位置开始向前移动2个字节。如果在上面的代码行之后执行下面的代码,文件指针就指向文件的第10个字节:
 
 
 
aFile.Seek(2,SeekOrigin.Current);
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,