I/O(6)——文件流

文件流:重点。前面是铺垫而已,这才是流操作的核心。

1、拷贝文件的两种方式:将源文件内容全部读到内存中,再写到目标文件中;读取源文件的1KB内存,写到目标文件中,再读取源文件的1KB内存,再写到目标文件中……。第二种方式就是一种流(Stream)的操作。

2、用File.ReadAllText、File.WriteAllText进行文件读写是一次性读、写,如果文件非常大会占内存、慢。需要读一行处理一行的机制,这就是流(Stream)。Stream会只读取要求的位置、长度的内容。

3、就像SqlConnection一样,Stream不会将所有内容一次性读取到内存中,有一个指针,指针指到哪里才能读、写到哪里。

4、有很多种类,文件流是其中一种。FileStream类new FileStream(“c:/a.txt”, filemode, fileaccess)后两个参数可选值及含义自己看。 FileStream可读可写。可以使用File.OpenRead、File.OpenWrite这两个简化调用方法。

5、练习:文件加密(每一位用255-r)

            FileInfo fileInfo = new FileInfo(txtSrcFile.Text);
            progressBar1.Maximum = (int)fileInfo.Length;

            //核心
            using (FileStream inputStream = 
                new FileStream(txtSrcFile.Text, FileMode.Open))
            {
                using (FileStream outputStream
                    = new FileStream(txtDescFile.Text, FileMode.Create))
                {
                    byte[] bytes = new byte[1024*1204];

                    int readBytes;
                    while ((readBytes = inputStream.Read(bytes, 0, bytes.Length)) > 0)
                    {
                        //对bytes进行加密处理
                        for (int i = 0; i < readBytes; i++)
                        {
                            bytes[i] = (byte)(byte.MaxValue - bytes[i]);
                        }
                        outputStream.Write(bytes, 0, readBytes);
                        progressBar1.Value += readBytes;
                    }

                    Encoding.UTF8.GetString(bytes);
                }
            }

6、byte[]是任何数据的最根本表示形式,任何数据最终都是二进制

7、Write用于向当前位置写入若干字节,Read用于读取若干字节。每次Read、Write指针都会自动后移。

8、文件流的Flush、Close、Dispose。

9、进度条,winform中有个专门的控件。

上一篇:使用php加载并读取csv文件


下一篇:如何在Python中将文件流转换为数据URI?