博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# File对象

Posted on 2007-08-24 10:27  孤峰皓月  阅读(7879)  评论(0编辑  收藏  举报

    File(文件)对象代表—个文件,并为检测文件是否存在、文件更名和文件删除提供了一些有用的方法。所有这些方法都是静态的,也就是说,不能使用NEW运算符创建File的实例,但可以直接使用File的方法。

if(File.Existas("File.txt"))
    File.Delete("File.txt");

也可以用File对象获得用于读写文件数据的文件流(FileStream)。
FileStream fs = File.OpenRead("File.any");

FileStream fs = File.OpenText("File.txt");

下面是一些有用的File方法
------------------------------------------------
File.FileExists(fileName)
File.Delete(fileName)
File.AppendText(String)
File.Copy(fromFile,toFile)
File.Move(fromFile,toFile)
File.GetExtension(fileName)    //获取文件的扩展名
File.HasExtension(fileName)    //若文件有扩展名,则返回true
-----------------------------------------------------------


    要读一个文本文件,首先使用File对象获取一个StreamReader对象,然后用文本流的话方法读取数据。
    StreamReader ts = File.OpenText("File.txt");
    string s = ts.ReadLine();

    要创建一个文本文件并写入数据,可使用CreateText方法获取—个StreamWrite对象。
    //open  for  writing
    StreamWriter  sw  = File.CreateText("File.txt");
    sw.WriteLine("Hello  file");
    如果向—个已经存在的文件追加数据,可以直接创建—个StreamWrite对象,并将用于追加的那个布尔参数设置为true。
    //append to text file
    StreamWriter sw = new StreamWriter("file.txt",true);


=====================================================
    大量经常发生的异常是在处理文件的输入和输出时引起的。非法文件名、文件不存在、目录不存在、非法文件名参数及文件保护错误等都会引起异常。因此,处理文件输入和输出的最好方法是
将文件处理代码放在try块中,这样可以保证掳获所有可能的错误,避免出现令人为难的致命错误。
各种文件类的方法都在其文档中结出了它们能抛出的异常。只要捕获通用Ex配必叨对象就能保证
捕获所有异常,但是如果需要对不同的异常进行不同的处理,既要对异常分别进行检测。
    例如,可以按照下列方式打开一个文本文件。


try
{
    StreamReader ts = File.OpenText("File.txt");
    string s = ts.ReadLine();
}
catch(Exception e )
{
    console.writeLine(e.Message);
}


    检测文件末尾
    有两种可用的方法能保证不会超过文本文件的末尾:(1)查找空(null)异常,(2)查找数据
流的末尾。当读数据超过了文本文件的末尾时,不会出现错误,也不会抛出文件结束的异常。但是,如果在文件末尾后读人一个字符中,会返回一个空值,可以用它在一个文件读人类中创建一个文件结束函数。
    private StreamReader rf; 
    private bool eof;
    //-----------------------------------
    Public  String  readLine()
    {
        string s = rf.ReadLine();
        if(s==null)
            eof=true;
        return s;
    }

    //-----------------------------------
    public bool fEof()
    {
        return eof;
    }

  另外一种保证读数据不会超过文件末尾的方法是,使用Stream的Peek方法在读数据前先查看一下。Peek方法返回文件中下一个字符的ASCII码,如果没有字符则返回 -1.
    public string read_line()
    {
        string s="";
        if(rf.Peek()>0)
            s = rf.ReadLine();
        else
            eof=true;

        return s;
    }



===================================
csFile.cs 类

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace OperateFile
{
    public class csFile
    {
        private string fileName;
        StreamReader ts;
        StreamWriter ws;
        private bool opened, writeOpened;

        public csFile()
        {
            init();
        }

        public csFile(string file_name)
        {
            fileName = file_name;
            init();
        }

        private void init()
        {
            opened = false;
            writeOpened = false;

        }


        //打开欲读数据的文件
        public bool OpenForRead()
        {
            return OpenForRead(fileName);
        }
        //打开欲读数据的文件
        public bool OpenForRead(string file_name)
        {
            fileName = file_name;
            try
            {
                ts = new StreamReader(fileName);
                opened = true;
            }
            catch(FileNotFoundException e)
            {
                return false;
            }
            return true;
        }

       
       
        //从文件读取数据
        public string readLine()
        {
            return ts.ReadLine();
        }


        //写文件
        public void writeLine(string s)
        {
            ws.WriteLine(s);
        }
        public bool OpenForWrite()
        {
            return OpenForWrite(fileName);
        }
        public bool OpenForWrite(string file_name)
        {
            try
            {
                ws = new StreamWriter(file_name);
                fileName = file_name;
                writeOpened = true;
                return true;
            }
            catch(FileNotFoundException e)
            {
                return false;
            }
        }

    }
}