当前位置:   article > 正文

深入理解C#中的IO操作 - FileStream流详解与示例

深入理解C#中的IO操作 - FileStream流详解与示例


在这里插入图片描述

C#编程中,文件操作是不可或缺的一部分。C#提供了丰富的类库来方便地进行文件的读取、写入、复制、移动以及目录操作等操作。其中,FileStream类是进行文件操作的重要类之一。本文将深入分析FileStream类的功能、用法以及在文件读取、写入、复制、移动以及目录操作等操作中的应用示例,帮助读者全面理解FileStream类的应用价值。

一、FileStream类的介绍

FileStream类是System.IO命名空间中的一个抽象类,它提供了对文件的读取和写入操作。FileStream类不能直接实例化,但可以通过其派生类进行文件操作,如FileStream、BufferedStream等。FileStream类的主要功能包括文件读取、文件写入、文件复制、文件移动以及目录操作等。

二、文件读取和写入

FileStream类提供了两个重要的方法来进行文件的读取和写入操作:Read方法和Write方法。

2.1 文件读取(FileStream.Read)

Read方法从文件中读取字节数据,将其存储在byte数组中。方法原型如下:

public int Read(byte[] buffer, int offset, int count)
  • 1

参数buffer表示存放读取数据的数组,offset表示数组的偏移量,count表示要读取的字节数。

示例代码:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (FileStream readStream = new FileStream("example.txt", FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = readStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytesRead));
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.2 文件写入(FileStream.Write)

Write方法将字节数据写入文件。方法原型如下:

public void Write(byte[] buffer, int offset, int count)
  • 1

参数buffer表示要写入的byte数组,offset表示数组的偏移量,count表示要写入的字节数。

示例代码:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (FileStream writeStream = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.Write))
        {
            byte[] buffer = new byte[1024];
            string text = "Hello, World!";
            byte[] textBytes = Encoding.ASCII.GetBytes(text);
            writeStream.Write(textBytes, 0, textBytes.Length);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

三、文件复制、移动和目录操作

FileStream类还提供了一些方法来进行文件的复制和移动操作,以及创建和获取目录信息。

3.1 文件复制(FileStream.Copy)

Copy方法用于复制文件。方法原型如下:

public static long Copy(string sourceFileName, string destinationFileName, int bufferSize)
  • 1

参数sourceFileName表示源文件的名称,destinationFileName表示目标文件的名称,bufferSize表示缓冲区大小。

示例代码:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceFile = "example.txt";
        string destinationFile = "example_copy.txt";
        File.Copy(sourceFile, destinationFile, 1024);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.2 文件移动(FileStream.Move)

Move方法用于移动文件。方法原型如下:

public static void Move(string sourceFileName, string destinationFileName)
  • 1

参数sourceFileName表示源文件的名称,destinationFileName表示目标文件的名称。

示例代码:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceFile = "example.txt";
        string destinationFile = "example_moved.txt";
        File.Move(sourceFile, destinationFile);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.3 目录操作

FileStream类本身不直接提供目录操作的功能,但是可以通过Directory类来进行目录的创建、获取最后写入时间等操作。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 创建目录
        string directoryPath = "example_directory";
        Directory.CreateDirectory(directoryPath);

        // 获取目录的最后写入时间
        DateTime lastWriteTime = Directory.GetLastWriteTime(directoryPath);
        Console.WriteLine($"The last write time of the directory is: {lastWriteTime}");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

四、FileStream类的性能特点

FileStream类是用于文件I/O操作的低级别流,它提供了对文件的直接访问,但并不提供高级的缓存机制。因此,它的读取速度和写入能力取决于底层的文件系统和硬件。在多核处理器系统上,FileStream类的并行性能主要受限于操作系统对文件的锁定机制。

FileStream类在进行文件操作时,会占用一定的内存资源,因为它需要维护内部的状态信息,如文件位置、缓存等。在大规模文件操作中,FileStream类的性能可能会受到影响,此时可以考虑使用更高层次的抽象,如StreamReader、StreamWriter、BinaryReader、BinaryWriter等,它们通常提供更好的性能和更简单的使用方式。

五、在WPF和ASP.NET中的应用

在WPF中,FileStream类可以用于读取或写入本地文件系统中的文件。例如,可以创建一个FileStream来读取用户的文档或图片,或者将应用程序的配置文件写入文件系统。

ASP.NET用于处理上传和下载文件示例

在ASP.NET中,FileStream类可以用于处理上传和下载文件。例如,可以使用FileStream来读取用户上传的文件,或者将文件写入服务器上的目录以供下载。

// ASP.NET中上传文件示例
public void UploadFile(HttpPostedFileBase file)
{
    string filePath = "C:\\path\\to\\upload\\" + file.FileName;
    using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
    {
        file.InputStream.CopyTo(fileStream);
    }
}

// ASP.NET中下载文件示例
public void DownloadFile(string filePath)
{
    using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
    {
        // 创建一个MemoryStream来复制文件内容
        MemoryStream memoryStream = new MemoryStream();
        fileStream.CopyTo(memoryStream);
        memoryStream.WriteTo(Response.OutputStream);
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
        memoryStream.Close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

FileStream类的使用示例

以下是一个简单的示例,展示了如何使用FileStream类进行文件的读取和写入操作:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 创建一个FileStream对象,用于读取文件
        using (FileStream readStream = new FileStream("example.txt", FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = readStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytesRead));
            }
        }

        // 创建一个FileStream对象,用于写入文件
        using (FileStream writeStream = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.Write))
        {
            byte[] buffer = new byte[1024];
            string text = "Hello, World!";
            byte[] textBytes = Encoding.ASCII.GetBytes(text);
            writeStream.Write(textBytes, 0, textBytes.Length);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

在这个示例中,我们首先创建了一个FileStream对象用于读取文件,然后创建了一个FileStream对象用于写入文件。这两个操作分别使用了一个byte数组来存储读取和写入的数据。

六、总结

FileStream类是C#中进行文件I/O操作的重要类之一。通过本文的分析,我们了解了FileStream类的功能、用法以及在文件读取、写入、复制、移动以及目录操作等操作中的应用示例。FileStream类的性能特点以及在WPF和ASP.NET中的应用也得到了讨论。希望这些信息能够帮助读者更好地理解和运用FileStream类,提高编程效率和解决实际问题的能力。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/585546
推荐阅读
相关标签
  

闽ICP备14008679号