csharp文本文件读写

时间:2023-02-11 09:17:18

 

ASP.Net/asp 生成静态HTML页!
日期:2006-1-22 3:14:35 人气: 3611     [ ]
 
 
ASP.Net生成静态HTML页!

环境:Microsoft .NET Framework SDK v1.1

OS:Windows Server 2003 中文版

ASP.Net生成静态HTML页

在Asp中实现的生成静态页用到的FileSystemObject对象!

在.Net中涉及此类操作的是System.IO



以下是程序代码 注:此代码非原创!参考别人代码

//生成HTML页

  public static bool WriteFile(string strText,string strContent,string strAuthor)

  {

   string path = HttpContext.Current.Server.MapPath("/news/");

   Encoding code = Encoding.GetEncoding("gb2312");

   // 读取模板文件

   string temp = HttpContext.Current.Server.MapPath("/news/text.html");

   StreamReader sr=null;

   StreamWriter sw=null;

   string str="";  

   try

   {

    sr = new StreamReader(temp, code);

    str = sr.ReadToEnd(); // 读取文件

   }

   catch(Exception exp)

   {

    HttpContext.Current.Response.Write(exp.Message);

    HttpContext.Current.Response.End();

    sr.Close();

   }

  

   

   string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";

   // 替换内容

   // 这时,模板文件已经读入到名称为str的变量中了

   str =str.Replace("ShowArticle",strText); //模板页中的ShowArticle

   str = str.Replace("biaoti",strText);

   str = str.Replace("content",strContent);

   str = str.Replace("author",strAuthor);

   // 写文件

   try

   {

    sw = new StreamWriter(path + htmlfilename , false, code);

    sw.Write(str);

    sw.Flush();

   }

   catch(Exception ex)

   {

    HttpContext.Current.Response.Write(ex.Message);

    HttpContext.Current.Response.End();

   }

   finally

   {

    sw.Close();

   }

   return true;



此函数放在Conn.CS基类中了

在添加新闻的代码中引用 注:工程名为Hover

 

    if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))

    {

     Response.Write("添加成功");

    }

    else

    {

     Response.Write("生成HTML出错!");

    }

-------------------------------------------------------------------------

模板页Text.html代码

-------------------------------------------------------------------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

 <HEAD>

  <title>ShowArticle</title>

  

 <body>

 

------------------------------------------------------------------------

提示添加成功后会出以当前时间为文件名的html文件!上面只是把传递过来的几个参数直接写入了HTML文件中,在实际应用中需要先添加数据库,然后再写入HTML文件

而且需要把生成的文件名等写入数库以便以后调用等,此实例只是实现了根据提交过来参数替换模板中的相应的字段! 需要完善的地方很多!哪位有高见,欢迎赐教!csharp文本文件读写


 

 

 

 biaoti

 <br>

 content<br>

 author

 </body>

</HTML>



System.IO命名空间中的类为托管应用程序提供文件以及其他形式的输入输出。托管i/o的基本构件是流,而流是字节导向的数据的抽象表示。流通过System.IO.Stream类表示.

System.IO.FileStream允许将文件作为流访问;

System.IO.MemoryStream允许将内存块作为流进行访问;…………

托管和非托管的应用程序最常使用的IO形式是文件IO。托管应用程序读写文件的一般步骤如下

、用FileStream对象打开文件

、进行二进制读写操作,在FileStream对象周围包装BinaryReader和BinaryWriter的实例,并调用BinaryReader和BinaryWriter方法执行输入输出。

、要读写文本,在FileStream对象的周围包装一个StreamReader和StreamWriter,然后使用StreamReader和StreamWriter方法完成输入输出。

、关闭FileStream对象。

下面是一个简单的文本文件读操作

using System;
using System.IO;

class FileTest
{
static void Main(string [] args)
{
string filename="testfile.txt";
//打开文件并显示其内容
StreamReader reader=null;
try
{
reader=new StreamReader(filename);
for(string line=reader.ReadLine();line!=null;line=reader.ReadLine())
Console.WriteLine(line);
}
catch(IOException e)
{
Console.WriteLine(e.Message);
}
finally
{
if(reader!=null)
reader.Close();
}
}
}
/**
* FCL是一个非常丰富的类库,所以还有许多打开文件并进行读取的方法,比如
* .用File.open创建一个FileStream,并围绕它包装一个StreamReader
* FileStream stream=File.Open(filename,FileMode.Open,FileAccess.Read);
* StreamReader reader=new StreamReaderaa(stream);
* .使用File.OpenText,在一步内创建一个FileStream和一个StreamReader
* StreamReader reader=File.OpenText(filename);
* 当然,还有其他的方法
* 若要对文本进行写入操作,可以使用StreamWriter
*/

其中的异常处理是为了防止意外的事情发生,如传递给StreamReader的构造函数的文件名非法,或者在执行raeder.Close();前匡架引发异常等。

微软的.Net框架为我们提供了基于流的I/O操作方式,这样就大大简化了开发者的工作。因为我们可以对一系列的通用对象进行操作,而不必关心该I/O操作是和本机的文件有关还是和网络中的数据有关。.Net框架主要为我们提供了一个System.IO命名空间,该命名空间基本包含了所有和I/O操作相关的类。

本文将向大家介绍一些基本的文件操作方法,包括对文件系统中的目录和文件的操作,还有就是文件的读写操作等。通过运用System.IO.DirectoryInfo类和System.IO.FileInfo类我们可以轻易的完成与目录和文件相关的操作,而通过运用System.IO.StreamReader类和System.IO.StreamWriter类我们可以方便的完成与文件的读写相关的操作。

 

命名空间概览

下面的表格显示了System.IO命名空间中最重要的一些类,通过运用这些类我们就能完成基本的文件操作。

 

表1

 

类名 功能和用途
BinaryReader、BinaryWriter 读写二进制数据
Directory、File、DirectoryInfo以及FileInfo 创建、删除并移动目录和文件,通过属性获取特定目录和文件的相关信息
FileStream 以随机方式访问文件
MemoryStream 访问存储在内存中的数据
StreamReader 、StreamWriter 读写文本数据信息
StringReader、StringWriter 运用字符串缓冲读写文本数据信息

 

运用DirectoryInfo类和FileInfo类

DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类。然而你却可以运用由该类定义的各种属性,下面的表格显示了该类已经定义了的各种属性。

 

表2

 

属性 功能和用途
Attributes 返回和文件相关的属性值,运用了FileAttributes枚举类型值
CreationTime 返回文件的创建时间
Exists 检查文件是否存在于给定的目录中
Extension 返回文件的扩展名
LastAccessTime 返回文件的上次访问时间
FullName 返回文件的绝对路径
LastWriteTime 返回文件的上次写操作时间
Name 返回给定文件的文件名
Delete() 删除一个文件的方法,请务必谨慎地运用该方法

DirectoryInfo类提供了创建、删除和移动目录等方法,要运用表2中的各种属性,我们首先得创建一个DirectoryInfo类的对象,然后就可以访问其各种属性了。

     
     DirectoryInfo dir1 = new DirectoryInfo(@"F:/Test");
Console.WriteLine("Full Name is : {0}", dir1.FullName);
Console.WriteLine("Attributes are : {0}", dir1.Attributes.ToString());

同时,我们还可以运用FileAttributes枚举类型值来获取和文件相关的各种属性,下面的表格就显示了该枚举类型中的各种值。

 

表3

 

功能和用途
Archive 返回文件的存档状态
Compressed 返回文件是否被压缩
Directory 返回文件是否是一个目录
Encrypted 返回文件是否被加密
Hidden 返回文件是否是隐藏的
Offline 表明文件数据是不可得的
ReadOnly 表明文件是只读的
System 表明文件是一个系统文件

 

目录下的文件操作

运用DirectoryInfo类的对象我们可以轻松的实现对目录以及和目录中的文件相关的操作,假如你要获得某个目录F:/Pictures下的所有BMP文件,那么通过下面的代码就可以实现该功能。

     
     DirectoryInfo dir = new DirectoryInfo(@"F:/ Pictures");
FileInfo[] bmpfiles = dir.GetFiles("*.bmp);
Console.WriteLine("Total number of bmp files", bmpfiles.Length);
Foreach( FileInfo f in bmpfiles)
{
Console.WriteLine("Name is : {0}", f.Name);
Console.WriteLine("Length of the file is : {0}", f.Length);
Console.WriteLine("Creation time is : {0}", f.CreationTime);
Console.WriteLine("Attributes of the file are : {0}",
f.Attributes.ToString());
}

上面的代码中我们首先创建了一个DirectoryInfo对象,然后通过调用该对象的GetFiles方法获取目录F:/Pictures下的所有以bmp为扩展名的文件,该方法返回的值是一个FileInfo类型的数组,每个元素则代表一个文件。最后,程序还列举了每个BMP文件的相关属性。

 

创建子目录

运用DirectoryInfo类创建子目录是非常容易的,你只要调用其中CreateSubdirectory()方法即可,演示代码如下。

     
     DirectoryInfo dir = new DirectoryInfo(@"F:/ Pictures");
try
{
dir.CreateSubdirectory("Sub");
dir.CreateSubdirectory(@"Sub/MySub");
}
catch(IOException e)
{
Console.WriteLine(e.Message);
}

 

运用FileInfo类创建、删除文件

通过FileInfo类,我们可以方便地创建出文件,并可以访问文件的属性同时还可以对文件进行打开文件、关闭文件、读写文件等基本的操作。下面的代码显示了如何创建一个文本文件并且去访问其创建时间、文件的绝对路径以及文件属性等文件信息,最后程序还给出了删除文件的方法。

     
     FileInfo fi = new FileInfo(@"F:/Myprogram.txt");
FileStream fs = fi.Create();
Console.WriteLine("Creation Time: {0}",fi.CreationTime);
Console.WriteLine("Full Name: {0}",fi.FullName);
Console.WriteLine("FileAttributes: {0}",fi.Attributes.ToString());
Console.WriteLine("Press any key to delete the file");
Console.Read();
fstr.Close();
fi.Delete();

 

理解FileInfo类的Open()方法

我们在对文件进行读写操作之前必须打开文件,FileInfo类为我们提供了一个Open()方法,该方法包含了两个枚举类型值的参数,一个为FileMode枚举类型值,另一个为FileAccess枚举类型值。通过设定这两个参数值,我们可以对文件的访问模式和操作权限进行控制。下面的两个表格分别显示了FileMode枚举类型的值和FileAccess枚举类型的值。

 

表4

 

功能和用途
Append 打开文件并添加数据,运用该方法时FileAccess枚举类型值应为Write。
Create 创建一个新文件,有可能会覆盖已经存在的文件。
CreateNew 创建一个新文件,如果该文件已经存在,则抛出IOException异常。
Open 打开一个已经存在的文件。
OpenOrCreate 打开文件,如果该文件不存在,则创建之。
Truncate 截短一个已经存在的文件。

 

表5

 

功能和用途
Read 可以从一个文件中读取数据。
ReadWrite 可以从一个文件中读取数据,同时还可以向文件中写入数据。
Write 可以向文件中写入数据。

下面的代码显示了Open()方法的具体运用方法。

     
     FileInfo f = new FileInfo("F:/MyFile.txt");
FileStream s = f.Open(FileMode.OpenorWrite, FileAccess.Read);

 

运用StreamReader类和StreamWriter类实现文件的读写操作

对文件的读写操作应该是最重要的文件操作,System.IO命名空间为我们提供了诸多文件读写操作类,在这里我要向大家介绍最常用也是最基本的StreamReader类和StreamWriter类。从这两个类的名称我们不难发现它们都是基于流的读写操作类。

我们可以通过File类的OpenText()方法来获取一个StreamReader对象,通过该对象我们可以实现对文本文件的读操作,方法如下:

     
     Console.WriteLine("Reading the contents from the file");
StreamReader s = File.OpenText("MyText.txt");
string read = null;
while ((read = s.ReadLine()) != null)
{
Console.WriteLine(read);
}
s.Close();

而通过调用FileInfo类的CreateText()方法我们可以获取一个StreamWriter对象,调用StreamWriter类的WriteLine()我们就可以向文本文件中写入数据了,方法如下:

     
     FileInfo f = new FileInfo("MyText.txt")
StreamWriter w = f.CreateText();
w.WriteLine("This is from");
w.WriteLine("Chapter 1");
w.WriteLine("Of C# Module");
w.Write(w.NewLine);
w.WriteLine("Thanks for your time");
w.Close();

 

总结

以上我简要地向大家介绍了C#文件操作的基本知识和方法,通过本文大家不难发现.Net框架下I/O操作的方便性。读者在学习了本文后,如果要进行一些基本的文件操作,那么对于System.IO命名空间中的诸如DirectoryInfo类、FileInfo类、FileStream类、StreamReader类以及StreamWriter类等类一定得有基本了解并在实际应用中灵活使用之。如果要对文件操作有更进一步的控制,那么不妨去研究一下System.IO命名空间中的更为具体和细节的一些类。最后,希望本文对大家能有所帮助。