位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# FileStream 对象 —— 写入数据

提问人:刘团圆发布时间:2020-12-10

    向随机访问文件中写入数据的过程与从中读取数据非常类似。首先需要创建一个字节数组;最简单的办法是首先构建要写入文件的字符数组。然后使用Encoder对象将其转换为字节数组,其用法非常类似于Decoder对象。最后调用Write()方法,将字节数组传送到文件中。

    下面构建一个简单的示例演示其过程。


试一试将数据写入随机访问文件:WriteRle\Program.cs

(1)在C:\BeginningCSharp7\Chapter20目录中创建一个新的控制台应用程序WriteFile。

(2)在Program.cs文件顶部添加下面的using指令:

using System;

using System.Collections.Generic; 

using System.Linq; 

using System.Text; 

using System.Threading.Tasks; 

using System.IO;

(3)在Main()方法中添加下面的代码:

static void Main(string[] args)

{

    byte[] byteData; 

    char[] charData; 

    try

    {

        FileStream aFile = new FileStrearn fTemp.txt", FileMode.Create); 

        charData = "My pink half of the drainpipe.u.ToCharArray(); 

        byteData = new byte[charData,Length];

        Encoder e = Encoding.UTF8.GetEncoder();

        e.GetBytes(charData, 0, charData.Length, byteData, 0, true};

        // Move file pointer to beginning of file.

        aFile.Seek(0, SeekOrigin.Begin);

        aFile.Write(byteData, 0, byteData.Length};

    }

catch (IOException ex)

{

    WriteLine ("An 10 exception has been thrown!");

    WriteLine(ex.ToString());

    ReadKey();

    return;

}

(4)运行该应用程序。它在短暂运行后将会关闭。

(5)导航到应用程序目录——在目录中己经保存了文件,因为我们使用了相对路径。目录位于 WriteFile\bin\Debug文件夹中。打开Temp.txt文件。可在文件中看到文本。


示例说明

    此应用程序打开自己目录中的文件,井在文件中写入了一个简单字符串。这个示例的结构非常类似于前面的示例,只是用Write()替代了 Read(),用Encoder替代了 Decoder。

下面的代码行使用String类的ToCharAmiyO方法,创建了字符数组。因为C#中的所有事物都是对象,文本“My pink half of the drainpipe.”实际上是一个String对象(尽管有点儿怪),所以甚至可在字符串上调用这些静态方法。

    CharData = r,My pink half of the drainpipe.ToCharArray ();

下面的代码行显示了如何将字符数组转换为FileStream对象需要的正确字节数组。

    Encoder-e = Encoding.UTF8.GetEncoder();

    e.GetBytes(charData, 0, charData.Length, byteData, 0, true);

    这次,要基于UTT-8编码方法来创建Encoder对象。也可将Unicode用于解码,此时在写入流之前,需要将字符数据编码为正确的字节格式。在GetBytes()方法中可以完成这些工作,它可将字符数组转换为字节数组。GetBytes()方法将字符数组作为第一个参数(本例中的charData),将该数组中起始位置的下标作为第二个参数(0表示数组的开头)。第三个参数是要转换的字符数量(charDataLength, charData数组中元素的个数)。第四个参数是在其中放入数据的字节数组(byteData),第五个参数是在字节数组中开始写入位置的索引(0表示byteData 数组的开头)。

    最后一个参数决定在结束后Encwler对象是否应该更新其状态,这反映了一个事实:Encoder对象在内存中保持记录它原来在字节数组中的位置。这有助于以后调用Encoder对象,但是当只调用一次时,这就没什么意义。最后对Encoder的调用必须将此参数设置为true,以清空其内存,释放对象,用于垃圾回收。

    此后使用WriteO方法向FileStream写入字节数组就变得非常简单:

    aFile.Seek(0, SeekOrigin.Begin);

    aFile.Write(byteData, 0, byteData.Length);

与ReadC)方法一样,Write()方法也有三个参数:包含要写入文件流的数据的字节数组,开始写入的数组索引和要写入的字节数。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部