C#的输入输出流 供就学参谋

本身对System.io面生,希望大神帮帮小编。在项目中,有功能供给对大文件(500M到2G)进行具名和加密。早前写的点子是二回性把公文读取取得Byte(卡塔尔(قطر‎,当先200M后就报System.outofMemoryexcption.PublicFunctionSignDataFileToString(ByValstrFilePathAsString,OptionalByValblnIsLargeFileAsBoolean=FalseState of QatarAsStringIfblnIsLargeFileThenReturnConvertArrayByteToString(SignDataFile(ReadLargeFile(strFilePath卡塔尔国卡塔尔国,ConvertMode.Base64String卡塔尔ElseReturnConvertArrayByteToString(SignDataFile(File.ReadAllBytes(strFilePathState of Qatar卡塔尔(قطر‎,ConvertMode.Base64StringState of QatarEndIfEndFunction小编的消除措施是每每读取文件,每便读10M,读到的剧情放到MemoryStream中,可是达到100多M也会产出System.outofMemoryexcption.代码如下:PublicFunctionReadLargeFile(ByValstrFilePathAsString卡塔尔(قطر‎AsByte(卡塔尔国'DimfsInputAsNewSystem.IO.FileStream(strFilePath,FileMode.Open,FileAccess.Read卡塔尔国DimfsInputAsFileStream=File.OpenRead(strFilePath卡塔尔国TryDimresult=NewMemoryStream(卡塔尔(قطر‎'DimfsWrite=NewFileStream(strFilePath,FileMode.AppendState of Qatar'DimfsInput=File.Open(strFilePath,FileMode.Open,FileAccess.Read卡塔尔'Debug.Print(Integer.马克斯Value卡塔尔'2147483647DimlngFileLengthAsLong=fsInput.LengthDimbyteBuffer(10485760State of QatarAsByteDimintBufsizeAsInt32DimlngBytesProcessedAsLong=0'runningcountofbytesprocessedWhilelngBytesProcessedlngFileLengthintBufsize=fsInput.Read(byteBuffer,0,10485760卡塔尔result.Write(byteBuffer,0,intBufsize卡塔尔国lngBytesProcessed=lngBytesProcessed+CLng(intBufsize卡塔尔Debug.Print(lngBytesProcessed卡塔尔EndWhileReturnresult.ToArray(卡塔尔国CatchexAsExceptionThrowexFinallyfsInput.Close(State of QatarEndTryresult.Write(byteBuffer,0,intBufsizeState of Qatar也会并发System.outofMemoryexcption.各位大神有没好的主意能够读取大文件,或是怎么样写分段读取文件,最终回到Byte(State of Qatar结果。

==================================DirectoryInfo

C# Stream 和 byte[] 之间的更改

//目录删除

Value 意义
FileMode.Create 成立文件,从前存在同名的文书将被毁掉
FileMode.CreateNew 创立新文件,那个文件在此以前不设有
FileMode.Open 展开已经存在的公文
FileMode.OpenOrCreate 张开文件假诺存在,不然成立新文件
FileMode.Truncate 张开以存在的文书,将它的剧情肃清掉
FileMode.Append 以充实的款式将数据写入到文件的结尾

:编码格局

byte[] buffer = System.Text.Encoding.Unicode.GetBytes("faint");
MemoryStream stream = new MemoryStream(buffer);

  2. (FileStream fs2 = File.Open("c:\test.txt", FileMode.Append, FileAccess.Write));

//获取目录成立的时辰

   Stream是八个相当大类的,在读写文件的时候,能够透过分化的流进行科班的多寡读写.

分类:

using System.Drawing.Imaging;

创建

gopost.aspx.cs

:以一种特定的编码从字节流中读取字符

  那么些法子的意思是创设二个足以读写的文本,並且可以允许其余人读取文件的剧情。

==================================Directory:

using System.IO;

(CreateNew成立新文件,Creat创制新文件,假若存在则覆盖,Open张开现成文件,

using System.Drawing;
using System.Drawing.Imaging;

获取子文件

 

writer.Write((char)data);//写入Char型数据

byteArray.aspx.cs

//将文件中多少读入byte数组aa

  FileMode.Append,以充实的办法张开文件"c:\test.txt",将或多或少内容写到"c:\test.txt"里。

通用I/O流类

 

//推断目录是或不是留存

 

(2)用于从流读取和写入流的类:

C#中结成Post发送的Stream与Byte Array的操作如同资料相当少.上边是两段代码.功用是将同文件夹下的a.jpg复制生成b.jpg.代码如下:

Write.WriteByte(字节卡塔尔(قطر‎;//将三个字节写入当前流

    一 .NET Framework 类库的System.IO 命名空间

byte[] aa=new

  Access能够是以下个中的二个值:

using System.Net;
using System.Text;

Filestream对象

   流的接续布局

        {

【FileShare】

    二 C#文本读写之FileStream详细明白

读取一行数据 reader.ReadToEnd(卡塔尔(قطر‎;//从当前职分读到结尾

  如若在开垦文件的时候想限定文件访谈权限,那么能够做如下的构造方法:

【Encoding.Default】

                    imageToConvert.Save(myms, formatOfImage);

BinaryReader

        private static byte[] CvtImgBArr(System.Drawing.Image imageToConvert, ImageFormat formatOfImage)

.

   public partial class imgHandler : System.Web.UI.Page
     {
        protected void Page_Load(object sender, EventArgs e)
         {
            try
            {
                Stream sin = Page.Request.InputStream;
                System.Drawing.Image img = System.Drawing.Bitmap.FromStream(sin);
                Bitmap bmp = new Bitmap(img);
                MemoryStream bmpStream = new MemoryStream();
                bmp.Save(bmpStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                FileStream fs = new FileStream(System.Web.HttpContext.Current.Server.MapPath("b.jpg"), FileMode.Create);
                bmpStream.WriteTo(fs);
                bmpStream.Close();
                fs.Close();
                bmpStream.Dispose();
                fs.Dispose();
                Response.Write("成功");
            }
            catch
            {
                Response.Write("失败");
            }
        }
    }
}

//读取数据

                    imArr = myms.ToArray();
                }
            }

Directory.GetLastAccessTime(path);//

using System.IO;

垄断(monopolyState of Qatar别的

      System.IO 命名空间富含允许读写文件和数据流的类型以至提供基本文件和目录援救的门类。

write只写,

 
  The FileMode and FileAccess的几条准绳:

方法;

namespace bArray {

目的对此文件的访谈权(none不分享,read

           postImage();
        }

获取子目录

       private void postImage()

String[] a=File.ReadAllLines(path,Encoding.Default);//

 
/// <summary>
/// 将 Stream 转成 byte[]
/// </summary>
public byte[] StreamToBytes(Stream stream)
{
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, bytes.Length);
    // 设置当前流的岗位为流的最初
    stream.Seek(0, SeekOrigin.Begin);
    return bytes;
}
/// <summary>
/// 将 byte[] 转成 Stream
/// </summary>
public Stream BytesToStream(byte[] bytes)
{
    Stream stream = new MemoryStream(bytes);
    return stream;
}

应用二进制格局读写文件数量,可读取任何文件

using System;

FileStream

相对来讲,byte Array在Html表单中的应用或然间接被忽略,不过正确的行使byte Array能够大大的优化程序,并做出一些意外的效果来。

int data;

除此以外,XML的三个利用是连串化,要用到把字符串转产生byte数组,方法:
     byte[] bytes = System.Text.UTF8Encoding.UTF8.GetBytes(XmlContent);
对立的,把byte数组转变为字符串的方法规为:
  string XmlContent = System.Text.UTFEncoding.UTF8.GetString(bytes);

FileStreamWrite=new

{
    public partial class postHandler : System.Web.UI.Page
    {
       protected void Page_Load(object sender, EventArgs e)
        {

Directory.CreateDirectory(path);

    }
}

【FileAccess】

  FileAccess.Read/  FileAccess.Write/  FileAccess.ReadWrite;

DirectoryInfo

MemoryStream ms = new MemoryStream(System.Text.Encoding.Default.GetBytes(AObjStr));

再次回到最终改进时间

namespace gopost

【FileMode】

  FileStream(string filename, FileMode mode, FileAccess access);

=======================================================File

  3.(FileStream fs3 =File.Open("c:\test.txt", FileMode.Truncate, FileAccess.ReadWrite)).

回来内定目录的父目录

  1. (FileStream fs1 = File.Open("c:\test.txt", FileMode.Open));

Directory.GetLastWriteTime(path);//

  FileMode.Truncate的意思是将文件张开清空里面包车型大巴内容后再对文件举行操作。

=======================================================FileInfo

            catch (Exception) { throw; }
            return imArr;
        }

File

  FileStreamfs=new FileStream(“c:\tab.txt”,FileMode.OpenOrCreate,FileAccess.Read);

================================================================BufferedStream

                   文件名       文件形式       操作格局

DirectoryInfo info=new DirectoryInfo(path);

  4. FileStream MyFileStream1 = new FileStream(@"c:Testing.txt", FileMode.Create, FileShare.Read);

Directory.GetFileSystemEntries(path);//

        }

StreamReaderreader=newStreamReader(fose,Encoding.Default);

 

Directory.SetLastWriteTime(path,时间卡塔尔国;//设置最后改正时间

using System.Net;

FileStream

/// <summary>
/// 将 Stream 写入文件
/// </summary>
public void StreamToFile(Stream stream,string fileName)
{
    // 把 Stream 转换成 byte[]
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, bytes.Length);
    // 设置当前流的职分为流的始发
    stream.Seek(0, SeekOrigin.Begin);
    // 把 byte[] 写入文件
    FileStream fs = new FileStream(fileName, FileMode.Create);
    BinaryWriter bw = new BinaryWriter(fs);
    bw.Write(bytes);
    bw.Close();
    fs.Close();
}
/// <summary>
/// 从文件读取 Stream
/// </summary>
public Stream FileToStream(string fileName)
{            
    // 张开文件
    FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
    // 读取文件的 byte[]
    byte[] bytes = new byte[fileStream.Length];
    fileStream.Read(bytes, 0, bytes.Length);
    fileStream.Close();
    // 把 byte[] 转换成 Stream
    Stream stream = new MemoryStream(bytes);
    return stream;
}

//创制新文件并写入内容,然后停业该文件,指标

using System.Data;