while(count > 0)
{
  count=fs.Read(Docbuffer,0,2048);
  sb.Append(Encoding.Default.GetString(Docbuffer));
}
这段代码不对。
如果文件里的内容大于2048个字节似乎没问题
如果文件里的内容正好是2048,sb 实际会添加相同的内容2遍
如果文件里的内容小于2048呢?还是要重复的。
重复了当然速度就不快了。
楼主拿个小文件实验先

解决方案 »

  1.   

    http://community.csdn.net/Expert/TopicView.asp?id=3232581
      

  2.   

    可以试试上面的:
    public string ReadData(string fn,string Ecd)//读文件
    {
    string rlt = "";
    StreamReader Sr = new StreamReader(File.OpenRead(fn),Encoding.GetEncoding(Ecd));
    rlt = Sr.ReadToEnd();
    Sr.DiscardBufferedData();
    Sr.Close();
    return rlt; 
    }
      

  3.   

    谢谢各位,要明天才能试。不过我感觉那种分块读似乎有道理。Tomgus(小桥流水) 的这种方法是一次性读完,会不会很慢?我的文件是.eml文件经过base64编码的。用outlook打开都要很长一段时间。但为什么总是得不到最后一段的内容呢?比如总长为2050字节,则读出来只能得到2048字节。
      

  4.   

    Tomgus(小桥流水) 提供的方法是不行的。我读一个10M的.eml文件,一个是速度上,另外是cpu占用率100%。关于分块,不知道有没有好的方法?多线程暂不考虑。
    我那样分,总是读不到最后一段内容
      

  5.   

    那样分块已没有问题,但是打开的时候还是很慢。并且cpu占用率为100%
    17.1 MB (17,969,435 字节)
    private void btnOpenFile_Click(object sender, System.EventArgs e)
    {
    long dt=DateTime.Now.Ticks; if(openFileDialog.ShowDialog()==DialogResult.OK)
    {
    txt_filename.Text=openFileDialog.FileName;
    }
    FileInfo fi=new FileInfo(txt_filename.Text);
    if(fi.Exists)
    {
    StringBuilder str=new StringBuilder();
    FileStream fs=new FileStream(txt_filename.Text,FileMode.Open,FileAccess.Read); byte[] Docbuffer=new byte[2048]; int count=fs.Read(Docbuffer,0,2048);

    while(count>0)
    {
    Docbuffer = new byte[2048];
    count = fs.Read(Docbuffer,0,count);
    }

    fs.Close(); }}