精华内容
下载资源
问答
  • C#文件操作文档

    2018-07-29 23:57:27
    C#操作Office等办公软件,如Excel、Word、Text、Xml文档的创建,读取,写入,保存等,来进行数据的保存与读取。
  • C#显示文件属性信息,C#文件操作类C#显示文件属性信息,C#文件操作类C#显示文件属性信息,C#文件操作类C#显示文件属性信息,C#文件操作
  • c#文件操作

    2011-11-08 14:23:28
    c#文件操作c#文件操作c#文件操作c#文件操作
  • C# 文件操作

    千次阅读 2018-07-17 15:17:32
    11 文件操作概述 11.1 驱动器  在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器。.NET Framework提供DriveInfo类和 DriveType枚举型,以方便在程序中直接...

    11 文件操作概述

    11.1 驱动器

      在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器。.NET Framework提供DriveInfo类和 DriveType枚举型,以方便在程序中直接使用驱动器。DriveInfo类的常用字段成员有DriveFormat(文件系统格式,如NTFS或FAT32)、DriveType(驱动器类型)、Name(驱动器名)、TotalSize(总空间)、TotalFreeSpace(获得驱动器可用空间)。常用的方法成员有GetDrives(获得可用驱动器列表)。

      DriveType枚举型的枚举值有CDRom(光驱)、Fixed(硬盘)、Network(网络驱动器)和Removeable(软盘或U盘)等。例如,以下代码可以输出每一个硬盘驱动器的剩余空间信息。

    复制代码

    DriveInfo[] drivers = DriveInfo.GetDrives();
    foreach(DriveInfo driver in drivers)
    {
        if(driver.DriveType == DriveType.Fixed && driver.DriveFormat == "NTFS")
        {
            Console.WriteLine("在{0}驱动器上还有{1}字节的剩余空间。", driver.Name, driver.AvailableFreeSpace);
        }
    }
    Console.ReadLine();

    复制代码

     11.2 目录

      为了方便检索文件,需要在驱动器中先创建目录,然后把文件保存到这个目录中。在Windows操作系统中,目录又称文件夹。每个驱动器都有一个根目录,使用”\”表示,如”C:\”表示C驱动器的根目录。创建在根目录中的目录称为一级子目录。在一级子目录中创建的目录称为二级子目录,依此类推。文件系统的目录结构是一种树形结构。

      .NET Framework提供了Directory类和DirectoryInfo类,以方便在程序中直接操作目录。

      Directory类的常用方法成员有CreateDirectory(创建新目录)、Delete(删除目录)、Exists(判断目录是否存在)、Move(移动目录)、GetFiles(获得目录的文件列表)、GetDirectories(获得子目录列表)等。

      DirectoryInfo类的常用字段成员有Name(提取目录名)、Exists(判断目录是否存在)、Parent(父目录)、Root(根目录)、MoveTo(移动目录)、GetFiles(获得目录的文件列表)、GetDirectories(获得子目录列表)等。例如,以下代码分别展现了Directory类和DirectoryInfo类的基本方法。

    复制代码

    Directory.CreateDirectory(@"d:\C#程序设计");
    if(Directory.Exists(@"d:\C#程序设计"))
    {
        Console.WriteLine("创建成功");
    }
    Directory.Delete(@"d:\C#程序设计");
    if (!Directory.Exists(@"d:\C#程序设计"))
    {
        Console.WriteLine("删除成功");
    }
    
    DirectoryInfo dir = new DirectoryInfo(@"d:\C#程序设计");
    if (!dir.Exists)
    {
        dir.Create();
    }
    else
    {
        Console.WriteLine("该目录已经存在");
    }

    复制代码

     11.3 文件

      .NET Framework提供了File类和FileInfo类,以方便在程序中直接操作文件。File和FileInfo类位于System.IO命名空间,都可以用来实现创建、复制、移动、打开文件等操作。File类和FileInfo类与Directory类和DirectoryInfo类的工作方式相似。File类是一个静态类,可直接调用其方法成员。FileInfo类不是静态类,需要先创建实例。

      1. 文件类File

      File类的常用方法如表11.1所示。

    表11.1 File类的常用方法

    常 用 方 法

    介 绍

    Open()

    打开文件

    Create()

    创建文件

    Copy()

    复制文件

    Delete()

    删除文件

    Exists()

    判断文件是否存在

    Move()

    移动文件

    Replace()

    替换文件

    AppendAllText()

    新建文件并添加文本

    ReadAllText()

    打开并读取文本内容

      下面通过一个示例演示File类的用法。

    (1)  创建一个名为FileCreate的控制台应用程序项目

    (2)  修改Program.cs文件中的Main方法的内容如下:        

     //设置所要创建文件的绝对路径
    string path = @"d:\test.txt";
    //以路径为参数创建文件
    File.Create(path);

      代码中变量path给出类文件的路径,利用File类的Create方法创建类该文件。查看D盘根目录,会有一个新的test.txt的文档出现。

      2. 文件信息类 FileInfo

      文件信息类FileInfo与File类不同,它虽然也提供类创建、复制、删除、移动和打开文件的方法,并且帮助创建FileStream对象,但是它提供的仅仅是实例方法。表11.2和表11.3分别展示类FileInfo类的常用字段和方法。

    表 11.2 FileInfo类常用字段

    常用字段

    介绍

    Name

    提取文件名

    Directory

    所属目录

    Exists

    是否存在(继承自父类FileSystemInfo)

    Extension

    文件扩展名

    Length

    文件长度

    IsReadOnly

    是否为只读

    表 11.3 FileInfo类常用方法

    常用方法

    介绍

    Open()

    打开文件

    Create()

    创建文件

    CopyTo()

    复制到新文件

    Delete()

    删除文件

    MoveTo()

    移动文件

    Replace()

    替换文件

    EnCrypt()

    加密文件

    Decrypt()

    解密文件

      因此要使用FileInfo类,必须先实例化一个FileInfo对象。FileInfo类的常用方法与File类基本相同。

      与文件类File和文件夹类Directory相比,文件信息类FileInfo和文件夹信息类DirectoryInfo具有其大部分功能。

      * File类和Directory类适合对不同的对象进行单一的处理。此种特殊情况下,静态方法的调用速度比较快,不用进行实例化。

      * FileInfo类和DirectoryInfo类适合用于对同一文件或文件夹进行多种操作的情况。此种情况下,实例化后的对象不需要每次都寻找文件,可以直接对该文件进行操作。

    11.4 路径

      每个驱动器包含一个或多个目录,而每个目录又可以包含一个或多个子目录,目录的结构为树形结构。一个文件只能保存在树形结构的某个特定的目录中,文件所在位置为路径。要检索文件时,必须首先确定文件的路径。路径由驱动器盘符、目录名、文件名、文件扩展名和分隔符组成,有两种种表示方法:一种是从驱动器的根目录开始书写,如C:\Windows\System32\notepad.exe,这种路径称为绝对路径;另一种是从当前目录位置开始书写,如System32\notepad.exe(假设当前目录为C:\Windows),这种路径称为相对路径。

      在C#中,使用文件和目录路径时要十分谨慎。C#将反斜杠”\”字符视作转义符,因此当路径表示为字符串时,要使用两个反斜杠表示,例如:

    “C:\\Windows\\System32\\notepad.exe”

      另外,C#允许在字符串前添加”@”标志,以提示编译器不要把”\”字符视作转义符,而视作普通字符,例如:

    @”C:\Windows\System32\notepad.exe”

      .NET Framework提供了Path类,以帮助在程序中管理文件和目录路径,Path类位于System.IO命名空间,是一个静态类,可以用来操作路径的每一个字段,如驱动器盘符、目录名、文件名、文件扩展名和分隔符等。Path类的常用字段成员有PathSeperator(路径分隔符,如”;”)、DirectorySeparatorChar(目录分隔符,如”\”)、VolumeSeparator(卷分隔符,如”:”)、AltDirectorySeparator(替换目录分隔符,如”/”),常用的方法成员有GetDirectoryName(取目录名)、GetFileName(取文件名)、GetExtension(取文件扩展名)、GetFullPath(取完整路径)、GetTempPath(取操作系统的临时文件路径)等,例如,以下代码表示提取并显示路径中的目录名和文件名。

    string path = @"c:\windows\System32\notepad.exe";
    Console.WriteLine(Path.GetDirectoryName(path));
    Console.WriteLine(Path.GetFileName(path));

      其中,目录名为”C:\Windows\System32”,文件名为”notepad.exe”。

    12 文件流概述

      在.NET Framework中,文件和流是有区别的。文件是存储在磁盘上的数据集,它具有名称和相应的路径。当打开一个文件并对其进行读/写时,该文件就称为流(stream)。但是,流不仅仅是指打开的磁盘文件,还可以是网络数据。.Net Framework允许在内存中创建流。此外,在控制台应用程序中,键盘输入和文本显示都是流。流包括以下基本操作:

      * 读取(read):把数据从流传输到某种数据结构中,如输出到字符数组中。

      * 写入(write):把数据从某种数据结构传输到流中,如把字节数组中的数据传输到流中。

      * 定位(seek):在流中查找或重新定位当前位置。

    12.1 操作流的类

      1. Stream类

      Stream类是所有流的抽象基类。Stream类的主要属性有CanRead(是否支持读取)、CanSeek(是否支持查找)、CanTimeout(是否可以超时)、CanWrite(是否支持写入)、Length(流的长度)、Position(获取或设置当前流中的位置)、ReadTimeout(获取或设置读取操作的超时时间)、WriteTimeout(获取或设置写操作的超时时间),主要方法有BeginRead(开始异步读操作),BeginWrite(开始异步写操作)、Close(关闭当前流)、EndRead(结束异步读操作)、EndWrite(结束异步写操作)、Flush(清除流的所有缓冲区并把缓冲数据写入基础设备)、Read(读取字节序列)、ReadByte(读取一个字节)、Seek(设置查找位置)、Write(写入字节序列)、WriteByte(写入一个字节)。 

      2. FileStream、MemoryStream和BufferedStream类

      文件流类FileStream以流的形式读、写、打开、关闭文件。另外,它还可以用来操作诸如:管道、标准输入/输出等其他与文件相关的操作系统句柄。

      内存流MemoryStream类用来在内存中创建流,以暂时保持数据,因此有了它就无须在硬盘上创建临时文件。它将数据封装为无符号的字节序列,可以直接进行读、写、查找操作。

      缓冲流BufferedStream类表示把流先添加到缓冲区,再进行数据的读/写操作。缓冲区是存储区中用来缓存数据的字节块。使用缓冲区可以减少访问数据时对操作系统的调用次数,增强系统的读/写功能。

      注意,FileStream类也有缓冲功能,在创建FileStream类的实例时,只需要指定缓冲区的大小即可。

    3. StreamReader和StreamWriter类

      流读取器StreamReader类用来以一种特定的编码(如:UTF-8)从字节流中读取字符,流写入器StreamWriter类用来以一种特定的编码(如:UTF-8)向流中写入字符。StreamReader和StreamWriter类一般用来操作文本文件。

    4. BinaryReader和BinaryWriter类

      BinaryReader类用特定的编码将基元数据类型读作二进制。BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。

    12.2 文件流类 FileStream

      文件流类FileStream公开了以文件为主的Stream,既支持同步读/写操作,也支持异步读/写操作,FileStream类的特点是操作字节和字节数组。这种方式不适合操作用字符数据构成的文本文件,适合处理非文本文件。FileStream类提供了对文件的低级而复杂的操作,因此能够实现更多高级的功能。

      下面演示FileStreamWriter类的基本用法:

    复制代码

    //要写入文件的字符数组
    char[] m_cDataWrite = new char[100];
    //包含要写入该流的数据的缓冲区
    byte[] m_bDataWrite = new byte[100];           
               
    try
    {
        //创建d:\file.txt的FileStream对象
        FileStream m_FileStream = new FileStream(@"d:\file.txt", FileMode.OpenOrCreate);
        //将要写入的字符串转换成字符数组
        m_cDataWrite = "test filestream".ToCharArray();
     
        //通过UTF-8编码方法将字符数组转成字节数组
        Encoder m_Enc = Encoding.UTF8.GetEncoder();
        m_Enc.GetBytes(m_cDataWrite, 0, m_cDataWrite.Length, m_bDataWrite, 0, true);
     
        //设置流当前位置为文件开始位置
        m_FileStream.Seek(0, SeekOrigin.Begin);
        //将字节数组中的内容写入文件
        m_FileStream.Write(m_bDataWrite, 0, m_bDataWrite.Length);
        if (m_FileStream != null)
        {
            //清除此流的缓冲区,使得所有缓冲的数据都写入到文件中
            m_FileStream.Flush();
            m_FileStream.Close();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("There is an IOException");
        Console.WriteLine(ex.Message);
    }
    Console.WriteLine("Write to File Succeed!");

    复制代码

       代码中首先给出了文件夹的路径,利用Write方法向文件中写入部分字符串。

      下面演示FileStreamReader类的基本用法:

    复制代码

    //要写入文件的字符数组
    char[] m_cDataWrite = new char[100];
    //包含要写入该流的数据的缓冲区
    byte[] m_bDataWrite = new byte[100];
     
    try
    {
        //创建d:\file.txt的FileStream对象
        FileStream m_FileStream = new FileStream(@"d:\file.txt", FileMode.Open);
     
        //设置流当前位置为文件开始位置
        m_FileStream.Seek(0, SeekOrigin.Begin);
        //将文件的内容存到字节数组中(缓存)
        m_FileStream.Read(m_bDataWrite, 0, 100);               
    }
    catch (Exception ex)
    {
        Console.WriteLine("There is an IOException");
        Console.WriteLine(ex.Message);
    }
     
    //通过UTF-8编码方法将字符数组转换成字符数组
    Decoder m_Dec = Encoding.UTF8.GetDecoder();
    m_Dec.GetChars(m_bDataWrite, 0, m_bDataWrite.Length, m_cDataWrite, 0);
    Console.WriteLine("Read from file Succeed!");
    Console.WriteLine(m_cDataWrite);

    复制代码

       代码中首先给出了文件夹的路径,利用Read方法从文件中读取了部分字符串。

    12.3 StreamWriter和StreamReader类

    应用FileStream类需要许多额外的数据类型转换操作,十分影响效率。StreamWriter类允许直接将字符和字符串写入文件。下面演示其用法:

    复制代码

    try
    {
        //保留文件现有数据,以追加写入的方式打开d:\file.txt文件
        StreamWriter m_SW = new StreamWriter(@"d:\file.txt", true);
        //向文件写入新字符串,并关闭StreamWriter
        m_SW.WriteLine("Another File Operation Method");
        m_SW.Close();               
    }
    catch (Exception ex)
    {
        Console.WriteLine("There is an IOException");
        Console.WriteLine(ex.Message);
             }
      StreamWriter类提供了另一种从文件中读取数据的方法,下面演示其用法:
    try
    {
        //以绝对路径方式构造新的StreamReader对象
        StreamReader m_SR = new StreamReader(@"d:\file.txt");
     
        //用ReadToEnd方法将d:\file.txt中的数据全部读入到字符串m_Data中,并关闭StreamReader
        string m_Data = m_SR.ReadToEnd();
        m_SR.Close();
        Console.WriteLine(m_Data);
    }
    catch (Exception ex)
    {
        Console.WriteLine("There is an IOException");
        Console.WriteLine(ex.Message);
    }

    复制代码

     12.4 BinaryReader和BinaryWriter类

      BinaryWriter类是除了FileStream和StreamWriter类之外另一种向文件写入数据的方式,与之前两种方式不同,BinaryWriter类将基础数据(如:字符串)以二进制形式写入文件流中,并支持用特定的编码写入。下面演示其用法:

    复制代码

    FileStream m_FS = new FileStream(@"d:\data.dat", FileMode.Create);
    //通过文件流创建相应的BinaryWriter
    BinaryWriter m_BW = new BinaryWriter(m_FS);
    for(int i = 0; i < 11; i++)
    {
        //向d:\data.dat中写入数据
        m_BW.Write((int)i);
    }
     
    m_BW.Close();
    m_FS.Close();

    复制代码

      代码中首先给出了文件夹的路径,利用BinaryWriter类的Write方法向文件中写入部分二进制字符。该文件是以二进制存储的,因此用记事本打开时,将无法观察到正确的字符,必须使用支持二进制的文本阅读器。

      BinaryReader类是和BinaryWriter类相对应的二进制数据读取类。它用特定的编码将基元数据类型(如:字符串类型)读作二进制值。

    复制代码

    FileStream m_FS = new FileStream(@"d:\data.dat", FileMode.Open, FileAccess.Read);
    //通过文件流创建相应的BinaryReader
    BinaryReader m_BR = new BinaryReader(m_FS);
    //从d:\data.dat中读取数据
    for(int i = 0; i < 11; i++)
    {
        Console.WriteLine(m_BR.ReadInt32());
    }
     
    m_BR.Close();
    m_FS.Close();
     
    Console.ReadLine();

    复制代码

      代码中首先给出了文件夹的路径。利用BinaryReader类的ReadInt32方法从文件中读取了所有的二进制字符,并将其读为整数,便于输出。

    13 综合应用

    13.1 创建日志文件

      日志文件的作用是记录程序运行事件。通常使用文本文件保存数据。日志文件需要程序自动创建,并在指定的事件发生时,使用特定的格式把事件的相关数据记录到日志文件中。

    1 技术要点

      * 创建FileStream类实例时,能够通过该类构造函数的参数,指定打开文件的方式和读/写访问的方式。通过指定打开方式,实现日志文件的自动创建。

      * 使用StreamWriter类实例写入文件时,因为部分数据可能由于系统缓慢而未能及时写入,所以在所有的写入操作完成后,需要调用Flush方法将缓冲区的文件内容更新到日志文件中。

      * 使用StreamWriter类实例写入文件时,写入的方式与Console类似,可以使用WriteLine向文件中写入一行文本数据。

    2 实现代码

    复制代码

    const string _FILENAME = @"..\..\logfile.txt";
    static void Main()
    {
        //从指定的目录以打开或者创建的形式读取日志文件
        using (FileStream fs = new FileStream(_FILENAME, FileMode.OpenOrCreate, FileAccess.Write))
        {
            //创建日志文件的写入流
            StreamWriter sw = new StreamWriter(fs);
            //向日志文件写入日志信息
            Log("日志文件创建成功", sw);
            //关闭日志文件写入流
            sw.Close();
            Console.WriteLine("日志文件已创建");
        }
     
        //读取并显示日志文件
        using (StreamReader sr = new StreamReader(_FILENAME, Encoding.UTF8))
        {
            string strContent = sr.ReadToEnd();
            sr.Close();
            Console.WriteLine(strContent);
        }
     
        Console.ReadLine();
    }
     
    static void Log(String message, TextWriter tw)
    {
        tw.Write("Log Entry:");
        tw.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
        tw.WriteLine(" :");
        tw.WriteLine(" :{0}", message);
                tw.WriteLine("----------------------------------");
                //将缓冲区中的内容更新到日志文件中
       tw.Flush();
    }

    复制代码

     3 源程序解读

      (1)程序引用了System.IO命名空间,在程序头部应添加对该命名空间的引用。

      (2)程序中定义了表示文件路径的常量_FILENAME

      (3)在创建FileStream类实例时,使用FileMode.OpenOrCreate模式,即文件不存在时就创建,存在时就打开已存在的文件。

    13.2 对日志文件的读/写操作

      日志文件的读/写和文本文件的读/写方法基本相同,日志文件除了使用StreamReader类和StreamWriter类的实例进行读/写外,还有一些记录事件的要求。例如,在写入数据时使用追加的方式、控制日志文件的大小等。

    1 技术要点

      * 使用FileInfo类实例获取日志文件的大小,实现当日志文件的大小超出指定范围时清空日志数据的功能。并使用该类实例的OpenWrite方法,创建FileStream类实例进行写入文件的操作,实现日志文件的自动创建功能。

      * 使用StreamWriter类中定义的Seek方法,将写入位置移动到文件末尾,实现将数据以追加方式写入日志文件的功能。

      * 使用StreamReader类中定义的Peek方法,判断读取器是否已经读到日志文件的末尾。

    2 实现代码

    复制代码

    //表示日志文件路径及文件名称的字符串
    const string FILENAME = @"..\..\logfile.txt";
    static void Main(string[] args)
    {
        //写入日志信息
        WriteLogFile(FILENAME, "日志信息一");
        //读取日志文件
        Console.WriteLine(ReadLogFile(FILENAME));
        Console.ReadLine();
    }
     
    static string ReadLogFile(string FileNameWithPath)
    {
        //从指定的目录以打开或创建的形式读取日志文件
        FileStream fs = new FileStream(FileNameWithPath, FileMode.OpenOrCreate, FileAccess.Read);
        //定义输出字符串
        StringBuilder output = new StringBuilder();
        //初始化该字符串的长度为0
        output.Length = 0;
        //为上面创建的文件流创建读取数据流
        StreamReader read = new StreamReader(fs);
        //设置当前流的起始位置为文件流的起始点
        read.BaseStream.Seek(0, SeekOrigin.Begin);
        //读取文件
        while(read.Peek() > -1)
        {
            //取文件的一行内容并换行
            output.Append(read.ReadLine() + "\n");
        }
        //关闭释放读数据流
        read.Close();
        //返回读到的日志文件内容
        return output.ToString();
    }
     
    static void WriteLogFile(string FileNameWithPath, string Message)
    {
        //定义文件信息对象
        FileInfo finfo = new FileInfo(FileNameWithPath);
        //判断文件是否存在以及是否大于2K
        if(finfo.Exists && finfo.Length > 2048)
        {
            //删除该文件
            finfo.Delete();
        }
        //创建只写文件流
        using(FileStream fs = finfo.OpenWrite())
        {
            //根据上面创建的文件流创建写数据流
            StreamWriter w = new StreamWriter(fs);
            //设置写数据流的起始位置为文件流的末尾
            w.BaseStream.Seek(0, SeekOrigin.End);
            //写入"Log Entry:"
            w.Write("Log Entry:");
            //写入系统的当前时间并换行
            w.Write("{0} {1} \r\n", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
            //写入日志内容并换行
            w.Write(Message + "\r\n");
            //写入-------------------------并换行
            w.Write("----------------------\r\n");
            //清空缓冲区内容,并把缓冲区内容写入基础流
            w.Flush();
            w.Close();
        }

    复制代码

     运行结果如下:

    Log Entry:14:26:09 2017年5月1日

    日志信息一

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

    3 源程序解读

      (1)本示例程序使用写日志文件的WriteLogFile方法向文件中写入一条信息数据,再通过读取日志文件的ReadLogFile方法将日志文件的数据显示出来。本示例程序的流程图如下所示:                                                                                       图1 对日志文件读/写操作示例程序流程图

      (2)在写入日志文件的WriteLogFile方法中,首先打开并判断日志文件的大小是否超出了指定的尺寸。如果超出了指定的尺寸,就先将日志文件删除。然后通过FileInfo类实例的OpenWrite方法创建只写文件流,向该流中写入日志数据。

      (3)在读取日志文件的ReadLogFile方法中,首先创建一个StringBuilder类的实例,用来获取日志文件中的文本数据。接着使用StreamReader类定义的BaseStream属性中的Seek方法,将读取器位置定位在流的开始位置,然后循环读取日志文件中的文本数据,并追加到StringBuilder类实例中,读取过程中,通过StreamReader类中定义的Peek方法判断是否读到文件末尾。

    11.3 复制文件

      静态File类中提供了许多操作文件的方法,使用Copy方法复制文件是比较常见的一种操作,调用Copy方法时,可以使用overwrite参数指定是否覆盖文件。

    1 技术要点

      * 使用静态类File的Exists方法判断文件是否存在。

      * 使用静态类File的Copy方法实现复制文件的功能,当文件存在时,通过指定override参数覆盖原有文件。

      * 复制文件是系统操作,为了保证程序的稳定性,在复制文件的过程中需要捕获并处理异常。

    2 实现代码

    复制代码

    //源文件路径及文件名
    const string SOURCEFILENAME = @"..\..\myfile.txt";
    //目标文件路径及文件名
    const string DESTINATIONFILENAME = @"..\..\result.txt";
    static void Main(string[] args)
    {
        try
        {
            //判断源文件是否存在
            if(!File.Exists(SOURCEFILENAME))
            {
                Console.WriteLine("找不到源文件");
            }
            else if (File.Exists(DESTINATIONFILENAME))
            {
                Console.Write("目标文件已经存在,是否覆盖?(Y/N)");
                if(Console.ReadKey(false).Key == ConsoleKey.Y)
                {
                    //覆盖文件
                    File.Copy(SOURCEFILENAME, DESTINATIONFILENAME, true);
                    Console.WriteLine("复制文件完成");
                }
                else
                {
                    Console.WriteLine("取消复制文件");
                }
            }
            else
            {
                //直接复制
                File.Copy(SOURCEFILENAME, DESTINATIONFILENAME);
                Console.WriteLine("复制文件完成");
            }
        }
        catch (Exception)
        {
            Console.WriteLine("复制文件失败");
        }
        Console.ReadLine();
    }

    复制代码

     3 源程序解读

      (1)本示例使用File静态类的方法实现文件的复制操作。首先判断源文件是否存在,如果源文件不存在,不作任何处理就返回。接着判断目标文件是否存在,如果目标文件不存在,就直接复制文件,否则就询问是否覆盖现有的目标文件,当用户选择覆盖时,使用源文件覆盖目标文件。

      (2)在复制文件的方法调用时,将复制文件的代码放在一个try...catch结构中,以便捕获并处理复制文件时出现的异常。

      (3)程序执行后,将程序文件所在目录下生成一个名为”result.txt”的文本文件。内容与”myfile.txt”文件一致。

    14 小结

      本章主要介绍了.NET中的文件相关的操作。重点介绍了System.IO命名空间下的File类、Directory类、FileInfo类、DirectoryInfo类及FileStream类、StreamReader类、StreamWriter类、BinaryReader类、BinaryWriter类等。并给出了相应的代码示例。

     

    附加:

    根据文件路径得到内存流的方法

    复制代码

            static MemoryStream GetFileStream(string fileName)
            {
                FileStream sr = File.OpenRead(fileName);
                int byteLen = (int)sr.Length;
                byte[] fileBytes = new byte[byteLen];
                int bytesRead = sr.Read(fileBytes, 0, byteLen);
                MemoryStream stream = new MemoryStream(fileBytes);
                sr.Dispose();
                return stream;
            }

    复制代码

     

    参考资料:《c# 编程兵书》 张志强 胡君 编著

     

    展开全文
  • C#文件和目录操作

    2018-04-16 10:02:33
    C#文件和目录操作类 主要包含文件操作类和目录操作类两个类方法
  • c#文件操作方法大全

    2009-12-19 08:38:37
    c#对文件或者文件夹全面的操作。以及c#文件操作方面的一些属性的概述。
  • c#文件操作

    2011-11-17 14:11:49
    c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作c#文件操作类v
  • C# 文件操作方法大全(转载)

    千次阅读 2019-07-11 03:42:17
    C#文件操作方法大全 本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下面的所有内容copy到目标文件夹下面、指定文件夹...

    C#文件操作方法大全

          本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下面的所有内容copy到目标文件夹下面、指定文件夹下面的所有内容Detele、读取文本文件、获取文件列表、读取日志文件、写入日志文件、创建HTML文件、CreateDirectory方法的使用

    C#追加文件
    StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt");
    sw.WriteLine("追逐理想");
    sw.WriteLine("kzlll");
    sw.WriteLine(".NET笔记");
    sw.Flush();
    sw.Close();

    C#拷贝文件
    string OrignFile,NewFile;
    OrignFile = Server.MapPath(".")+"\\myText.txt";
    NewFile = Server.MapPath(".")+"\\myTextCopy.txt";
    File.Copy(OrignFile,NewFile,true);

    C#删除文件
    string delFile = Server.MapPath(".")+"\\myTextCopy.txt";
    File.Delete(delFile);

    C#移动文件
    string OrignFile,NewFile;
    OrignFile = Server.MapPath(".")+"\\myText.txt";
    NewFile = Server.MapPath(".")+"\\myTextCopy.txt";
    File.Move(OrignFile,NewFile);

    C#创建目录
    // 创建目录c:\sixAge
    DirectoryInfo d=Directory.CreateDirectory("c:\\sixAge");
    // d1指向c:\sixAge\sixAge1
    DirectoryInfo d1=d.CreateSubdirectory("sixAge1");
    // d2指向c:\sixAge\sixAge1\sixAge1_1
    DirectoryInfo d2=d1.CreateSubdirectory("sixAge1_1");
    // 将当前目录设为c:\sixAge
    Directory.SetCurrentDirectory("c:\\sixAge");
    // 创建目录c:\sixAge\sixAge2
    Directory.CreateDirectory("sixAge2");
    // 创建目录c:\sixAge\sixAge2\sixAge2_1
    Directory.CreateDirectory("sixAge2\\sixAge2_1");

    递归删除文件夹及文件
    <%@ Page Language=C#%>
    <%@ Import namespace="System.IO"%>
    <script_ runat=server>
    public void DeleteFolder(string dir)
    {
        if (Directory.Exists(dir)) //如果存在这个文件夹删除之
        {
            foreach(string d in Directory.GetFileSystemEntries(dir))
            {
                if(File.Exists(d))
                    File.Delete(d); //直接删除其中的文件
                else
                    DeleteFolder(d); //递归删除子文件夹
            }
            Directory.Delete(dir); //删除已空文件夹
            Response.Write(dir+" 文件夹删除成功");
        }
        else
            Response.Write(dir+" 该文件夹不存在"); //如果文件夹不存在则提示
    }

    protected void Page_Load (Object sender ,EventArgs e)
    {
        string Dir="D:\\gbook\\11";
        DeleteFolder(Dir); //调用函数删除文件夹
    }


    // ======================================================
      // 实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面
      // 如果目标文件夹为只读属性就会报错。
      // April 18April2005 In STU
      // ======================================================
      public static void CopyDir(string srcPath,string aimPath)
      {
       try
       {
        // 检查目标目录是否以目录分割字符结束如果不是则添加之
        if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar)
         aimPath += Path.DirectorySeparatorChar;
        // 判断目标目录是否存在如果不存在则新建之
        if(!Directory.Exists(aimPath)) Directory.CreateDirectory(aimPath);
        // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
        // 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法
        // string[] fileList = Directory.GetFiles(srcPath);
        string[] fileList = Directory.GetFileSystemEntries(srcPath);
        // 遍历所有的文件和目录
        foreach(string file in fileList)
        {
         // 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
         if(Directory.Exists(file))
          CopyDir(file,aimPath+Path.GetFileName(file));
          // 否则直接Copy文件
         else
          File.Copy(file,aimPath+Path.GetFileName(file),true);
        }
       }
       catch (Exception e)
       {
        MessageBox.Show (e.ToString());
       }
      }

     

     

     // ======================================================
      // 实现一个静态方法将指定文件夹下面的所有内容Detele
      // 测试的时候要小心操作,删除之后无法恢复。
      // April 18April2005 In STU
      // ======================================================
      public static void DeleteDir(string aimPath)
      {
       try
       {
        // 检查目标目录是否以目录分割字符结束如果不是则添加之
        if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar)
         aimPath += Path.DirectorySeparatorChar;
        // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
        // 如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法
        // string[] fileList = Directory.GetFiles(aimPath);
        string[] fileList = Directory.GetFileSystemEntries(aimPath);
        // 遍历所有的文件和目录
        foreach(string file in fileList)
        {
         // 先当作目录处理如果存在这个目录就递归Delete该目录下面的文件
         if(Directory.Exists(file))
         {
          DeleteDir(aimPath+Path.GetFileName(file));
         }
          // 否则直接Delete文件
         else
         {
          File.Delete (aimPath+Path.GetFileName(file));
         }
        }
        //删除文件夹
        System.IO .Directory .Delete (aimPath,true);
       }
       catch (Exception e)
       {
        MessageBox.Show (e.ToString());
       }
      }

    需要引用命名空间:
    using System.IO;

    /** <summary>
     
      /// </summary>
      /// <param ></param>
      /// <param ></param>

      //--------------------------------------------------
     //---------------------------------------------------

      public static void CopyFolder(string strFromPath,string strToPath)
      {
       //如果源文件夹不存在,则创建
       if (!Directory.Exists(strFromPath))
       {   
        Directory.CreateDirectory(strFromPath);
       }  

       //取得要拷贝的文件夹名
       string strFolderName = strFromPath.Substring(strFromPath.LastIndexOf("\\") + 1,strFromPath.Length - strFromPath.LastIndexOf("\\") - 1);  

       //如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
       if (!Directory.Exists(strToPath + "\\" + strFolderName))
       {   
        Directory.CreateDirectory(strToPath + "\\" + strFolderName);
       }
       //创建数组保存源文件夹下的文件名
       string[] strFiles = Directory.GetFiles(strFromPath);

       //循环拷贝文件
       for(int i = 0;i < strFiles.Length;i++)
       {
        //取得拷贝的文件名,只取文件名,地址截掉。
        string strFileName = strFiles[i].Substring(strFiles[i].LastIndexOf("\\") + 1,strFiles[i].Length - strFiles[i].LastIndexOf("\\") - 1);
        //开始拷贝文件,true表示覆盖同名文件
        File.Copy(strFiles[i],strToPath + "\\" + strFolderName + "\\" + strFileName,true);
       }
     
       //创建DirectoryInfo实例
       DirectoryInfo dirInfo = new DirectoryInfo(strFromPath);
       //取得源文件夹下的所有子文件夹名称
       DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
       for (int j = 0;j < ZiPath.Length;j++)
       {
        //获取所有子文件夹名
        string strZiPath = strFromPath + "\\" + ZiPath[j].ToString();  
        //把得到的子文件夹当成新的源文件夹,从头开始新一轮的拷贝
        CopyFolder(strZiPath,strToPath + "\\" + strFolderName);
       }
      }

    一.读取文本文件
     /** <summary>
      /// 读取文本文件
      /// </summary>
      private void ReadFromTxtFile()
      {
          if(filePath.PostedFile.FileName != "")
          {
              txtFilePath =filePath.PostedFile.FileName;
              fileExtName = txtFilePath.Substring(txtFilePath.LastIndexOf(".")+1,3);
     
             if(fileExtName !="txt" && fileExtName != "TXT")
             {
                 Response.Write("请选择文本文件");
             }
             else
             {
                 StreamReader fileStream = new StreamReader(txtFilePath,Encoding.Default);
                 txtContent.Text = fileStream.ReadToEnd();
                 fileStream.Close();
             }
         }
      }
    二.获取文件列表
    1/** <summary>
      2/// 获取文件列表
      3/// </summary>
      4private void GetFileList()
      5{
      6    string strCurDir,FileName,FileExt;
      7   
      8    /**文件大小
      9    long FileSize;
     10   
     11    /**最后修改时间;
     12    DateTime FileModify;
     13
     14    /**初始化
     15    if(!IsPostBack)
     16    {
     17        /**初始化时,默认为当前页面所在的目录
     18        strCurDir = Server.MapPath(".");
     19        lblCurDir.Text = strCurDir;
     20        txtCurDir.Text = strCurDir;
     21    }
     22    else
     23    {
     24        strCurDir = txtCurDir.Text;
     25        txtCurDir.Text = strCurDir;
     26        lblCurDir.Text = strCurDir;
     27    }
     28    FileInfo fi;
     29    DirectoryInfo dir;
     30    TableCell td;
     31    TableRow tr;
     32    tr = new TableRow();
     33   
     34    /**动态添加单元格内容
     35    td = new TableCell();
     36    td.Controls.Add(new LiteralControl("文件名"));
     37    tr.Cells.Add(td);
     38    td = new TableCell();
     39    td.Controls.Add(new LiteralControl("文件类型"));
     40    tr.Cells.Add(td);
     41    td = new TableCell();
     42    td.Controls.Add(new LiteralControl("文件大小"));
     43    tr.Cells.Add(td);
     44    td = new TableCell();
     45    td.Controls.Add(new LiteralControl("最后修改时间"));
     46    tr.Cells.Add(td);
     47
     48    tableDirInfo.Rows.Add(tr);
     49   
     50    /**针对当前目录建立目录引用对象
     51    DirectoryInfo dirInfo = new DirectoryInfo(txtCurDir.Text);
     52   
     53    /**循环判断当前目录下的文件和目录
     54    foreach(FileSystemInfo fsi in dirInfo.GetFileSystemInfos())
     55    {
     56        FileName = "";
     57        FileExt = "";
     58        FileSize = 0;
     59       
     60        /**如果是文件
     61        if(fsi is FileInfo)
     62        {
     63            fi = (FileInfo)fsi;
     64           
     65            /**取得文件名
     66            FileName = fi.Name;
     67           
     68            /**取得文件的扩展名
     69            FileExt = fi.Extension;
     70           
     71            /**取得文件的大小
     72            FileSize = fi.Length;
     73           
     74            /**取得文件的最后修改时间
     75            FileModify = fi.LastWriteTime;
     76        }
     77
     78        /**否则是目录
     79        else
     80        {
     81            dir = (DirectoryInfo)fsi;
     82           
     83            /**取得目录名
     84            FileName = dir.Name;
     85           
     86            /**取得目录的最后修改时间
     87            FileModify = dir.LastWriteTime;
     88           
     89            /**设置文件的扩展名为"文件夹"
     90            FileExt = "文件夹";
     91        }
     92       
     93        /**动态添加表格内容
     94        tr = new TableRow();
     95        td = new TableCell();
     96        td.Controls.Add(new LiteralControl(FileName));
     97        tr.Cells.Add(td);
     98        td = new TableCell();
     99        td.Controls.Add(new LiteralControl(FileExt));
    100        tr.Cells.Add(td);
    101        td = new TableCell();
    102        td.Controls.Add(new LiteralControl(FileSize.ToString()+"字节"));
    103        tr.Cells.Add(td);
    104        td = new TableCell();
    105        td.Controls.Add(new LiteralControl(FileModify.ToString("yyyy-mm-dd hh:mm:ss")));
    106        tr.Cells.Add(td);
    107        tableDirInfo.Rows.Add(tr);
    108    }
    109}

    三.读取日志文件

    1/** <summary>
     2/// 读取日志文件
     3/// </summary>
     4private void ReadLogFile()
     5{
     6    /**从指定的目录以打开或者创建的形式读取日志文件
     7    FileStream fs  = new FileStream(Server.MapPath("upedFile")+"\\logfile.txt", FileMode.OpenOrCreate, FileAccess.Read);
     8
     9    /**定义输出字符串
    10    StringBuilder output = new StringBuilder();
    11   
    12    /**初始化该字符串的长度为0
    13    output.Length = 0;
    14   
    15    /**为上面创建的文件流创建读取数据流
    16    StreamReader read = new StreamReader(fs);
    17   
    18    /**设置当前流的起始位置为文件流的起始点
    19    read.BaseStream.Seek(0, SeekOrigin.Begin);
    20   
    21    /**读取文件
    22    while (read.Peek() > -1)
    23    {
    24        /**取文件的一行内容并换行
    25        output.Append(read.ReadLine() + "\n");
    26    }
    27   
    28    /**关闭释放读数据流
    29    read.Close();
    30   
    31    /**返回读到的日志文件内容
    32    return output.ToString();
    33}

    四.写入日志文件


     1/** <summary>
     2/// 写入日志文件
     3/// </summary>
     4/// <param ></param>
     5private void WriteLogFile(string input)
     6{   
     7    /**指定日志文件的目录
     8    string fname = Server.MapPath("upedFile") + "\\logfile.txt";
     9    /**定义文件信息对象
    10    FileInfo finfo = new FileInfo(fname);
    11
    12    /**判断文件是否存在以及是否大于2K
    13    if ( finfo.Exists && finfo.Length > 2048 )
    14    {
    15        /**删除该文件
    16        finfo.Delete();
    17    }
    18    /**创建只写文件流
    19    using(FileStream fs = finfo.OpenWrite())
    20    {
    21        /**根据上面创建的文件流创建写数据流
    22        StreamWriter w = new StreamWriter(fs);
    23       
    24        /**设置写数据流的起始位置为文件流的末尾
    25        w.BaseStream.Seek(0, SeekOrigin.End);
    26       
    27              w.Write("\nLog Entry : ");
    29       
    30        /**写入当前系统时间并换行
    31        w.Write("{0} {1} \r\n", DateTime.Now.ToLongTimeString(),
    32            DateTime.Now.ToLongDateString());
    33       
    34        /**写入日志内容并换行
    35        w.Write(input + "\n");
    36       
    37        /**写入------------------------------------“并换行
    38        w.Write("------------------------------------\n");
    39       
    40        /**清空缓冲区内容,并把缓冲区内容写入基础流
    41        w.Flush();
    42       
    43        /**关闭写数据流
    44        w.Close();
    45    }
    46}

    五.C#创建HTML文件
     1/** <summary>
     2/// 创建HTML文件
     3/// </summary>
     4private void CreateHtmlFile()
     5{   
     6    /**定义和html标记数目一致的数组
     7    string[] newContent = new string[5];
     8    StringBuilder strhtml = new StringBuilder();
     9    try
    10    {
    11        /**创建StreamReader对象
    12        using (StreamReader sr = new StreamReader(Server.MapPath("createHTML") + "\\template.html"))
    13        {
    14            String oneline;
    15           
    16            /**读取指定的HTML文件模板
    17            while ((oneline = sr.ReadLine()) != null)
    18            {
    19                strhtml.Append(oneline);
    20            }
    21            sr.Close();
    22        }
    23    }
    24    catch(Exception err)
    25    {
    26        /**输出异常信息
    27        Response.Write(err.ToString());
    28    }
    29    /**为标记数组赋值
    30    newContent[0] = txtTitle.Text;//标题
    31    newContent[1] = "BackColor='#cccfff'";//背景色
    32    newContent[2] = "#ff0000";//字体颜色
    33    newContent[3] = "100px";//字体大小
    34    newContent[4] = txtContent.Text;//主要内容
    35
    36    /**根据上面新的内容生成html文件
    37    try
    38    {
    39        /**指定要生成的HTML文件
    40        string fname = Server.MapPath("createHTML") +"\\" + DateTime.Now.ToString("yyyymmddhhmmss") + ".html";
    41       
    42        /**替换html模版文件里的标记为新的内容
    43        for(int i=0;i < 5;i++)
    44        {
    45            strhtml.Replace("$htmlkey["+i+"]",newContent[i]);
    46        }
    47        /**创建文件信息对象
    48        FileInfo finfo = new FileInfo(fname);
    49       
    50        /**以打开或者写入的形式创建文件流
    51        using(FileStream fs = finfo.OpenWrite())
    52        {
    53            /**根据上面创建的文件流创建写数据流
    54            StreamWriter sw = new StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
    55           
    56            /**把新的内容写到创建的HTML页面中
    57            sw.WriteLine(strhtml);
    58            sw.Flush();
    59            sw.Close();
    60        }
    61       
    62        /**设置超级链接的属性
    63        hyCreateFile.Text = DateTime.Now.ToString("yyyymmddhhmmss")+".html";
    64        hyCreateFile.NavigateUrl = "createHTML/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
    65    }
    66    catch(Exception err)
    67    {
    68        Response.Write (err.ToString());
    69    }
    70}


    CreateDirectory方法的使用

     using   System;  
      using   System.IO;  
       
      class   Test    
      {  
              public   static   void   Main()    
              {  
                      //   Specify   the   directory   you   want   to   manipulate.  
                      string   path   =   @"c:\MyDir";  
       
                      try    
                      {  
                              //   Determine   whether   the   directory   exists.  
                              if   (Directory.Exists(path))    
                              {  
                                      Console.WriteLine("That   path   exists   already.");  
                                      return;  
                              }  
       
                              //   Try   to   create   the   directory.  
                              DirectoryInfo   di   =   Directory.CreateDirectory(path);  
                              Console.WriteLine("The   directory   was   created   successfully   at   {0}.",   Directory.GetCreationTime(path));  
       
                              //   Delete   the   directory.  
                              di.Delete();  
                              Console.WriteLine("The   directory   was   deleted   successfully.");  
                      }    
                      catch   (Exception   e)    
                      {  
                              Console.WriteLine("The   process   failed:   {0}",   e.ToString());  
                      }    
                      finally   {}  
              }  
      }  


    本文来自: http://www.itwis.com/html/net/c/20081204/3044.html

    本文来自: http://www.itwis.com/html/net/c/20081204/3044_2.html

    本文来自: http://www.itwis.com/html/net/c/20081204/3044_3.html

    本文来自:http://www.itwis.com/html/net/c/20081204/3044_4.html


     

     

     

    转载于:https://www.cnblogs.com/sql4me/archive/2009/06/18/1505735.html

    展开全文
  • C#文件操作

    2013-01-15 10:23:12
    C#文件操作
  • C#文件操作之FileStream类详解

    千次阅读 2020-04-22 16:45:50
    首先要明确FileStream类操作的是字节和字节数组 常用构造函数介绍 最简单的构造函数只有两个参数,即文件名和FileMode枚举值 FileStream(fliename , FileMode.<Member>) 另一个常用构造函数则有三个参数...

    首先要明确FileStream类操作的是字节和字节数组

    常用构造函数介绍

    最简单的构造函数只有两个参数,即文件名和FileMode枚举值

    FileStream(fliename , FileMode.<Member>)

    另一个常用构造函数则有三个参数,第三个参数是FileAccess枚举的一个成员,它指定了流的作用

    FileStream(fliename , FileMode.<Member> ,FileAccess.<Member>)

    FileMode枚举成员:

    成员文件存在文件不存在
    Append打开文件,流指向文件的末尾处,只能与枚举FileAccess.Write结合使用创建一个新文件。只能与枚举FileAccess.Write结合使用
    Create删除该文件,然后创建新文件创建新文件
    CreateNew抛出异常创建新文件
    Open打开文件,流指向文件开头处抛出异常
    OpenOrCreate打开文件,流指向文件开头处创建新文件
    Truncate打开文件,清除其内容。流指向文件开头处,保留文件的初始创建日期抛出异常

    FileAccess枚举成员:

    成员说明
    Read打开文件,用于只读
    Write打开文件,用于只写
    ReadWrite打开文件,用于读写

    1.文件位置

    FileStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置。大多数情况下,当打开文件时,它就指向文件的开始位置,但是可以修改此指针,实现此功能的方法是Seek()方法。

    Seek()方法有两个参数:第一个参数指定文件指针移动距离(以字节为单位)。第二个参数指定开始计算的起始位置,用SeekOrigin枚举的一个值表示。SeekOrigin枚举包含3个值:Begin、Current和End。

    例如:

    FileStream file = File.OpenRead("config.txt");
    
    file.Seek(6,SeekOrigin.Begin);//将文件指针移动到文件的第六个字节处,其起始位置就是文件的第一个字节
    
    file.Seek(6,SeekOrigin.Current);//将指针从当前位置移动6个字节
    
    file.Seek(-6,SeekOrigin.End);//将指针移动到文件的倒数第6个字节

    2.读取数据

    使用Read()方法:从文件中读取数据,再把数据写入一个字节数组。

    Read()有三个参数:第一个参数是传入的字节数组,用来存放FileStream对象中的数据,第二个参数是字节数组中开始写入数据的位置,通常是0,第三个参数指定从文件中读取多少字节

    FileStream file = new FileStream("home.txt",FileMode.Open);
    
    byte[] byteData = new byte[1024];
    
    file.Seek(10,SeekOrigin.Begin);
    
    file.Read(byteData,0,1024);//从home.txt文件的第10个字节开始读取1024个字节写入byteData字节数组

    3.写入数据

    使用Write()方法:从字节数组中读取数据,再把数据写入文件中。

    和Read()方法一样,Write()方法也是三个参数

    上例中已经从home.txt文本中读取了1024个字节到byteData字节数组中,我们再将这个数组的数据写到新的文件中

    FileStream newFile = new FileStream("Temp.txt",FileModel.Create);
    
    newFile.Seek(0,SeekOrigin.Begin);
    
    newFile.Write(byteData,0,byteData.Length);//将byteData字节数组里的数据写入到Temp.txt文件中,从第0个字节位置开始

     

    展开全文
  • c#文件操作c#文件操作c#文件操作c#文件操作
  • C#文件操作

    2008-06-20 15:01:32
    c#读写文件文件的类,加密了字符串
  • C# ini文件操作

    热门讨论 2016-11-16 10:08:04
    C#可以对ini文件进行读和写操作。包括:读取key的值、保存key的值、读取所有section、读取所有key、移除section、移除key等操作。文章地址:http://www.cnblogs.com/polk6/p/6052908.html
  • C#文件操作大全

    热门讨论 2011-11-01 14:33:41
    C#文件操作大全,读、写、移动、删除、搜索、简单加密、简单解密、枚举子文件夹等
  • C#文件操作大全.pdf

    热门讨论 2011-12-23 21:58:40
    C#文件操作大全.pdf,超清晰,内容超全,与大家共享,一同进步!
  • c#文件操作:将键盘输入的内容写到文件中;将文件中的内容以二进制方式和文本方式读取出来; c#数据库操作:使用dataGridView控件;对数据进行查询,删除的操作; 比较简单,适合初学者
  • C#文件读写操作

    2014-05-10 23:04:41
    对于C#文件的读写操作,写入文件内容,读取文件内容,并且选择对应文件进行删除操作
  • C# 文件操作详解(一)File类

    千次阅读 2014-02-15 14:44:14
    C#文件操作相当方便,主要涉及到四个类:File、FileInfo、Directory、DirectoryInfo,前两个提供了针对文件操作,后两个提供了针对目录的操作,类图关系如下:  图1:类图  下面通过实例来看下每...

    C#对文件的操作相当方便,主要涉及到四个类:File、FileInfo、Directory、DirectoryInfo,前两个提供了针对文件的操作,后两个提供了针对目录的操作,类图关系如下:

      图1:类图

        下面通过实例来看下每个类的使用。

      一、File类  File中提供了许多的静态方法,使用这些静态方法我们可以方便的对文件进行读写查等基本操作。

      1、读文件

    // 摘要:打开一个文件,将文件的内容读入一个字符串,然后关闭该文件。
    public  static  byte [] ReadAllBytes( string  path);
    // 摘要: 打开一个文本文件,读取文件的所有行,然后关闭该文件。
    public  static  string [] ReadAllLines( string  path);
    // 摘要:打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。
    public  static  string [] ReadAllLines( string  path, Encoding encoding);
    // 摘要: 打开一个文本文件,读取文件的所有行,然后关闭该文件。
    public  static  string  ReadAllText( string  path);
    // 摘要: 打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。
    public  static  string  ReadAllText( string  path, Encoding encoding);
    // 摘要: 读取文件的文本行。
    public  static  IEnumerable< string > ReadLines( string  path);
    // 摘要: 读取具有指定编码的文件的文本行。
    public  static  IEnumerable< string > ReadLines( string  path, Encoding encoding);

      2、写文件

    // 摘要: 创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。如果目标文件已存在,则覆盖该文件。
    public  static  void  WriteAllBytes( string  path, byte [] bytes);
    // 摘要:创建一个新文件,在其中写入一组字符串,然后关闭该文件。
    public  static  void  WriteAllLines( string  path, IEnumerable< string > contents);
    // 摘要:创建一个新文件,在其中写入指定的字符串数组,然后关闭该文件。
    public  static  void  WriteAllLines( string  path, string [] contents);
    // 摘要:使用指定的编码创建一个新文件,在其中写入一组字符串,然后关闭该文件。
    public  static  void  WriteAllLines( string  path, IEnumerable< string > contents, Encoding encoding);
    // 摘要:创建一个新文件,使用指定的编码在其中写入指定的字符串数组,然后关闭该文件。
    public  static  void  WriteAllLines( string  path, string [] contents, Encoding encoding);
    // 摘要: 创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则覆盖该文件。
    public  static  void  WriteAllText( string  path, string  contents);
    // 摘要: 创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则覆盖该文件。
    public  static  void  WriteAllText( string  path, string  contents, Encoding encoding);

      3、追加内容

    // 摘要: 在一个文件中追加文本行,然后关闭该文件。
    public  static  void  AppendAllLines( string  path, IEnumerable< string > contents);
    // 摘要:使用指定的编码向一个文件中追加文本行,然后关闭该文件。
    public  static  void  AppendAllLines( string  path, IEnumerable< string > contents, Encoding encoding);
    // 摘要:打开一个文件,向其中追加指定的字符串,然后关闭该文件。如果文件不存在,此方法创建一个文件,将指定的字符串写入文件,然后关闭该文件。
    public  static  void  AppendAllText( string  path, string  contents);
    // 摘要:将指定的字符串追加到文件中,如果文件还不存在则创建该文件。
    public  static  void  AppendAllText( string  path, string  contents, Encoding encoding);
    // 摘要: 创建一个 System.IO.StreamWriter,它将 UTF-8 编码文本追加到现有文件。
    public  static  StreamWriter AppendText( string  path);

      4、创建文件

    // 摘要:在指定路径中创建或覆盖文件。
    public  static  FileStream Create( string  path);
    // 摘要:创建或覆盖指定的文件。
    public  static  FileStream Create( string  path, int  bufferSize);
    // 摘要:创建或覆盖指定的文件,并指定缓冲区大小和一个描述如何创建或覆盖该文件的 System.IO.FileOptions 值。
    public  static  FileStream Create( string  path, int  bufferSize, FileOptions options);
    // 摘要:创建或覆盖具有指定的缓冲区大小、文件选项和文件安全性的指定文件。
    public  static  FileStream Create( string  path, int  bufferSize, FileOptions options, FileSecurity fileSecurity);
            

      5、打开文件

    // 摘要: 打开指定路径上的 System.IO.FileStream,具有读/写访问权限。
    public  static  FileStream Open( string  path, FileMode mode);
    // 摘要:以指定的模式和访问权限打开指定路径上的 System.IO.FileStream。
    public  static  FileStream Open( string  path, FileMode mode, FileAccess access);
    // 摘要:打开指定路径上的 System.IO.FileStream,具有指定的读、写或读/写访问模式以及指定的共享选项。
    public  static  FileStream Open( string  path, FileMode mode, FileAccess access, FileShare share);
    // 摘要:打开现有文件以进行读取。
    public  static  FileStream OpenRead( string  path);

      6、获取和设置文件属性

    // 摘要:获取一个 System.Security.AccessControl.FileSecurity 对象,它封装指定文件的访问控制列表 (ACL) 条目。
    public  static  FileSecurity GetAccessControl( string  path);
    // 摘要:获取一个 System.Security.AccessControl.FileSecurity 对象,它封装特定文件的指定类型的访问控制列表 (ACL)项。
    public  static  FileSecurity GetAccessControl( string  path, AccessControlSections includeSections);
    // 摘要: 获取在此路径上的文件的 System.IO.FileAttributes。
    public  static  FileAttributes GetAttributes( string  path);
    // 摘要:返回指定文件或目录的创建日期和时间。
    public  static  DateTime GetCreationTime( string  path);
    // 摘要:返回指定的文件或目录的创建日期及时间,其格式为协调世界时 (UTC)。
    public  static  DateTime GetCreationTimeUtc( string  path);
    // 摘要:返回上次访问指定文件或目录的日期和时间。
    public  static  DateTime GetLastAccessTime( string  path);
    // 摘要: 返回上次访问指定的文件或目录的日期及时间,其格式为协调世界时 (UTC)。
    public  static  DateTime GetLastAccessTimeUtc( string  path);
    // 摘要:返回上次写入指定文件或目录的日期和时间。
    public  static  DateTime GetLastWriteTime( string  path);
    // 摘要: 返回上次写入指定的文件或目录的日期和时间,其格式为协调世界时 (UTC)。
    public  static  DateTime GetLastWriteTimeUtc( string  path);
     
     
    // 摘要:对指定的文件应用由 System.Security.AccessControl.FileSecurity 对象描述的访问控制列表 (ACL) 项。
    public  static  void  SetAccessControl( string  path, FileSecurity fileSecurity);
    // 摘要:设置指定路径上文件的指定的 System.IO.FileAttributes。
    public  static  void  SetAttributes( string  path, FileAttributes fileAttributes);
    // 摘要:设置创建该文件的日期和时间。
    public  static  void  SetCreationTime( string  path, DateTime creationTime);
    // 摘要:设置文件创建的日期和时间,其格式为协调世界时 (UTC)。
    public  static  void  SetCreationTimeUtc( string  path, DateTime creationTimeUtc);
    // 摘要:设置上次访问指定文件的日期和时间。
    public  static  void  SetLastAccessTime( string  path, DateTime lastAccessTime);
    // 摘要:设置上次访问指定的文件的日期和时间,其格式为协调世界时 (UTC)。
    public  static  void  SetLastAccessTimeUtc( string  path, DateTime lastAccessTimeUtc);
    // 摘要:设置上次写入指定文件的日期和时间。
    public  static  void  SetLastWriteTime( string  path, DateTime lastWriteTime);
    // 摘要:设置上次写入指定的文件的日期和时间,其格式为协调世界时 (UTC)。
    public  static  void  SetLastWriteTimeUtc( string  path, DateTime lastWriteTimeUtc);

      7、复制、移动、替换

    // 摘要:将现有文件复制到新文件。不允许覆盖同名的文件。
    public  static  void  Copy( string  sourceFileName, string  destFileName);
    // 摘要:将现有文件复制到新文件。允许覆盖同名的文件。
    public  static  void  Copy( string  sourceFileName, string  destFileName, bool  overwrite);
     
    // 摘要:将指定文件移到新位置,并提供指定新文件名的选项。
    public  static  void  Move( string  sourceFileName, string  destFileName);
     
     
    // 摘要:使用其他文件的内容替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的备份。
    public  static  void  Replace( string  sourceFileName, string  destinationFileName, string  destinationBackupFileName);
    // 摘要: 用其他文件的内容替换指定文件的内容,删除原始文件,并创建被替换文件的备份和(可选)忽略合并错误。
    public  static  void  Replace( string  sourceFileName, string  destinationFileName, string  destinationBackupFileName, bool  ignoreMetadataErrors);

      8、加密解密、删除、判定是否存在

    // 摘要:将某个文件加密,使得只有加密该文件的帐户才能将其解密。
    public  static  void  Encrypt( string  path);
    // 摘要:解密由当前帐户使用 System.IO.File.Encrypt(System.String) 方法加密的文件。
    public  static  void  Decrypt( string  path);
     
     
    // 摘要: 删除指定的文件。如果指定的文件不存在,则不引发异常
    public  static  void  Delete( string  path);
     
     
    // 摘要:确定指定的文件是否存在。
    public  static  bool  Exists( string  path);

       通过上面的函数声明,大家应该很清楚如何是好这些方法了,这里就不举例说明了。

       同时,看到如此多的函数,我们也很清楚的知道,File类已经可以满足我们对文件操作的基本需求了。File类通过静态方法的方式为我们提供了操作文件的途径。

      本篇就写到这里,希望提供的资料对大家在做文件操作的时候有所帮助。

    展开全文
  • C#文件查找(按内容、文件名称查找)源码
  • 摘要:C#源码,文件操作,临时文件 C#将文件保存到临时文件中,程序自动生成临时文件名称,这个程序是面向Visual C#初学者的,如果自认为水平很高,可以不用看,我认为挺基础的代码。
  • 基于C#语言(WindowForm窗体应用程序示例)实现文本文件读取和写入方法;文件的删除、移动和复制;对文件中的目录文件进行读取显示与删除等操作
  • C#文件管理系统

    2018-12-13 09:13:16
    c#文件操作软件,可以实现简单的复制粘贴删除,新建文件夹,以及进程管理
  • C# 文件操作方法大全

    2009-08-13 14:55:45
    C# 文件 操作 方法 大全C# 文件 操作 方法 大全C# 文件 操作 方法 大全C# 文件 操作 方法 大全C# 文件 操作 方法 大全C# 文件 操作 方法 大全C# 文件 操作 方法 大全
  • C#操作XML文件完整源码(十分经典)
  • 编写了一个WinForm程序,项目文件存放于D:\Projects,编译后的文件位于D:\Projects\Demo\Demo\bin\Debug,最后的结果如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName   获取模块...
  • C对SFTP的文件操作 1、连接sftp协议 2、实现文件的添加、删除、移动等
  • C#对tiff文件操作

    2018-04-20 22:09:19
    winForm程序选择tiff文件后,对tiff文件进行拆分,将拆分后的矩阵展示在窗口中,可以拆分多个tiff文件展示在窗口,点击合并后,将所有展示的图片合并成新的tiff文件并输出到本地
  • 关于C#操作文件并在窗体程序的控件中显示文件的方法,希望对大家有益
  • C#操作读写文本文件txt

    万次阅读 2018-04-12 14:15:05
    计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的...在Windows操作系统中,一个文本文件的前几个字节是用来指定该文件的编码方式的 如果你使用NotePad或WordPad来打开一个文本文件,你并不用担心该文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 260,837
精华内容 104,334
关键字:

c#文件操作

c# 订阅
友情链接: cyComponents4.41.zip