[ASP.NET学习笔记之一]ASP.NET中文件操作

来源:互联网 发布:samba访问windows共享 编辑:程序博客网 时间:2024/05/29 12:23

ASP.NET中文件操作

System.IO

Directory:用于创建、移动和枚举通过目录和子目录

File :用于创建、复制、删除、移动和打开文件

Path:对包含文件或目录路径信息的String实例执行操作

StreamReaderStreamWriter:以一种特定的编码读写字符

 

关于ASP.NET中的文件处理首先要了解两个概念:文件和流    

  • 文件:存储在介质上的永久数据的有序集合,它是进行数据读写操作的基本对象。每个文件都拥有一些基本属性,如文件名、存放路径、访问权限等。    
  • 流:提供了连续的字节流存放空间,它也是数据读写操作的基本对象。流中存放的数据空间可以是不连续的,甚至可以分布在多个地方,注意流是在内存中的。

File

•提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream

对象。

File 类的所有方法都是静态的,因而无需具有文件的实例就可被调用

常用方法

AppendText:创建一个SteamWriter对象,用于在指定文件的末尾添加新的内容。

Copy:复制指定文件

Move:移动文件

Delete:删除文件。

Exist:判断指定文件是否存在

Open:以指定的方式、权限打开指定文件

OpenRead:以只读方式打开指定文件

OpenText:打开文本文件,返回流

OpenWrite:以读写方式打开指定文件

Cteate:创建一个指定文件

CreateText:创建一个文本文件

【示例代码】

创建

//建立StreamWriter为写做准备

StreamWriter rw = File.CreateText(Server.MapPath(".")+"//CreateText.txt");

//使用WriteLine写入内容

rw.WriteLine("使用File.CreateText方法");

rw.WriteLine("返回StreamWriter流,利用这个流进行写入。");

//将缓冲区的内容写入文件

rw.Flush();

//关闭rw对象

rw.Close();

 

打开

//打开文本文件

string strFileName = FileSelect.PostedFile.FileName;

if(Path.GetFileName(strFileName)=="")

     return;

StreamReader sr = File.OpenText(strFileName);

StringBuilder output = new StringBuilder();

string rl;

while((rl=sr.ReadLine())!=null)

{

     output.Append(rl+"<br>");

}

lblFile.Text = output.ToString();

sr.Close();

 

//拷贝文件

File.Copy(OrignFile,NewFile);

//删除文件

File.Delete(delFile);

//移动文件

File.Move(OrignFile,NewFile);

FileStream

FileStream对于在文件系统上读取和写入文件非常有用, FileStream 缓存输入和输出,以获得更好的性能。

FileStream类能够以同步或异步这两种模式之一打开文件,而且对同步方法(ReadWrite)和异步方法(BeginReadBeginWrite)有显著的性能影响。

•在Windows系统中,如果输入输出数据小于64KB,则采用同步模式性能较好;而当大于

64KB时,则最好采用异步模式

【示例代码】

FileStream fs = new FileStream(Server.MapPath(".")+"//FileStreamCreateText.txt",FileMode.Create,FileAccess.Write);

//建立StreamWriter为写做准备。还可以设置编码。这是前面File类打开文件所没有的(这里读中文编码会变成乱码)

StreamWriter rw = new StreamWriter(fs,Encoding.Default);

//使用WriteLine写入内容

rw.WriteLine("曾经有一份真挚的爱情放在我的面前。");

rw.WriteLine("而我没有珍惜,当我失去的时候,我才追悔莫及。");

rw.WriteLine("人世间最大的痛苦莫过于此,如果上天给我一个再来一次的机会。");

rw.WriteLine("我会对那个女孩说三个字:/"我爱你。/"");

rw.WriteLine("如果非要在这份爱上加一个期限的话,我希望是一万年。");

//将缓冲区的内容写入文件

rw.Flush();

//关闭rw对象

rw.Close();

fs.Close();

 

fs = new FileStream(Server.MapPath(".")+"//FileStreamCreateText.txt",FileMode.Open,FileAccess.Read);

//打开文本文件

StreamReader sr = new StreamReader(fs,Encoding.Default);

StringBuilder output = new StringBuilder();

string rl;

while((rl=sr.ReadLine())!=null)

{

     output.Append(rl+"<br>");

}

lblFile.Text = output.ToString();

sr.Close();

fs.Close();

string OriginFile = FileSelect.PostedFile.FileName;

string NewFile     = tbDes.Text +"//"+Path.GetFileName(OriginFile);

 

 

//建立两个FileStream对象

FileStream fsOF = new FileStream(OriginFile,FileMode.Open,FileAccess.Read);

FileStream fsNF = new FileStream(NewFile,FileMode.Create,FileAccess.Write);

 

//建立分别建立一个读写类

BinaryReader br = new BinaryReader(fsOF);

BinaryWriter bw = new BinaryWriter(fsNF);

 

//将读取文件流指针指向流的头部

br.BaseStream.Seek(0,SeekOrigin.Begin);

//将写入文件流指针指向流的尾部

bw.BaseStream.Seek(0,SeekOrigin.End);

 

while(br.BaseStream.Position < br.BaseStream.Length)

{

     //从br流中读取一个Byte并马上写入bw流

     bw.Write(br.ReadByte());

}

 

br.Close();

bw.Close();

//操作后判断源文件是否存在

 

if(File.Exists(NewFile))

{

     lbInfo.Text = "附件复制成功!";

}

else

{

     lbInfo.Text = "文件复制失败!";

}

DirectoryInfoFileInfo

DirectoryFile)类的所有方法都是静态的,因而无需具有目录的实例就可被调用。DirectoryInfoFileInfo)类只包含实例方法。

DirectoryFile)类的静态方法对所有方法执行安全检查。如果打算多次重用一个对象,请考虑改用DirectoryInfoFileInfo)的相应实例方法,因为安全检查并不总是必要的。

【示例代码】

string strCurrentDir;

//初始化一些数据

if(!Page.IsPostBack)

{

     strCurrentDir = Server.MapPath(".");

     lblCurrentDir.Text = strCurrentDir;

     tbCurrentDir.Text = strCurrentDir;

}

else

{

     strCurrentDir = tbCurrentDir.Text;

     tbCurrentDir.Text = strCurrentDir;

     lblCurrentDir.Text = strCurrentDir;

}

 

FileInfo fi;

DirectoryInfo di;

TableCell td;

TableRow  tr;

 

/*

     设定Table中的数据

     首先搞定第一行

*/

tr = new TableRow();

 

td = new TableCell();

td.Controls.Add(new LiteralControl("<img src='name.gif'>"));

tr.Cells.Add(td);

 

td = new TableCell();

td.Controls.Add(new LiteralControl("<img src='size.gif'>"));

tr.Cells.Add(td);

 

td = new TableCell();

td.Controls.Add(new LiteralControl("<img src='lastmodify.gif'>"));

tr.Cells.Add(td);

 

tbDirInfo.Rows.Add(tr);

 

string FileName;            //文件名称

string FileExt;             //文件扩展名

string FilePic;             //文件图片

long FileSize;              //文件大小

DateTime FileModify;        //文件更新时间

 

DirectoryInfo dir = new DirectoryInfo(strCurrentDir);

foreach(FileSystemInfo fsiin dir.GetFileSystemInfos())

{

     FilePic = "";

     FileName = "";

     FileExt = "";

     FileSize = 0;

 

     if(fsi is FileInfo)

     {

         //表示当前fsi是文件

         fi = (FileInfo)fsi;

         FileName = fi.Name;

         FileExt       = fi.Extension;

         FileSize = fi.Length;

         FileModify    = fi.LastWriteTime;

         //通过扩展名来选择文件显示图标

         switch(FileExt)

         {

              case ".gif":

                   FilePic = "gif.gif";

                   break;

              default:

                   FilePic = "other.gif";

                   break;

         }

         FilePic = "<img src='"+FilePic+"' width=25 height=20>";

     }

     else

     {

         //当前为目录

         di = (DirectoryInfo)fsi;

         FileName = di.Name;

         FileModify    = di.LastWriteTime;

         FilePic = "<img src='directory.gif' width=25 height=20>";

     }

 

     //组建新的行

     tr = new TableRow();

 

     td = new TableCell();

     td.Controls.Add(new LiteralControl(FilePic+"&nbsp;"+FileName));

     tr.Cells.Add(td);

 

     td = new TableCell();

     td.Controls.Add(new LiteralControl(FileSize.ToString()));

     tr.Cells.Add(td);

 

     td = new TableCell();

     td.Controls.Add(new LiteralControl(FileModify.ToString()));

     tr.Cells.Add(td);

 

     tbDirInfo.Rows.Add(tr);

}

 

 

protected bool bExist = false;

public string strCurPath ="c:";

public int nPost = 0;

 

protected void btnFind_Click(object sender, System.EventArgs e)

{

     try

     {

         if(tbInput.Text.Trim()=="")

         {

              lbPath.Text = "文件名为空!";

              return;

         }

         string[] drives = System.IO.Directory.GetLogicalDrives();

 

         foreach (string strin drives)

         {

             

              if(ProcessDirectory(str))

                   break;

         }

         if(!bExist)

              lbPath.Text = "不存在此文件!";

     }

     catch (System.IO.IOException)

     {

         Response.Write("I/O错误!");

     }

     catch (System.Security.SecurityException)

     {

         Response.Write("没有访问权限!");

     }

 

}

public bool  ProcessDirectory(string targetDirectory)

{

     try

     {

         // Process the list of files found in the directory

         string [] fileEntries = Directory.GetFiles(targetDirectory);

         foreach(string fileNamein fileEntries)

         {

              if(ProcessFile(fileName))

                   return true;

             

         }

 

         // Recurse into subdirectories of this directory

         string [] subdirectoryEntries =Directory.GetDirectories(targetDirectory);

         foreach(string subdirectoryin subdirectoryEntries)

         {

              if(ProcessDirectory(subdirectory))

                   return true;

         }

         return false;

     }

     catch(Exception)

     {

         return false;

     }

}

public bool ProcessFile(string strFileName)

{

     if(Path.GetFileName(strFileName).ToLower()==tbInput.Text.Trim().ToLower())

     {

         lbPath.Text = strFileName.ToLower();

         bExist=true;

         return true;

     }

     else

         return false;

}

原创粉丝点击