首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

大文件读取!该如何解决

2012-03-11 
大文件读取!!!急!!!大文件读取!!!只想一行行读!!!不想一下子把一个几百M的文件读入!!!!请问有什么方法。网

大文件读取!!!急!!!
大文件读取!!!
只想一行行读!!!不想一下子把一个几百M的文件读入!!!!
请问有什么方法。网站都快挂了...

[解决办法]
那就不要用ReadToEnd啦,StreamReader有ReadLine方法,可以读入一行


[解决办法]
几百M的文件,上传的时候按规则划开/....
[解决办法]
如果用FileStream 读取
FileStream fs = new FileStream(...);
byte[] buf = new byte[1024];
int count;
count=fs.Read(0,buf.Length,buf);
配合移动fs.Position可以读取到文件的任何一部分数据
[解决办法]
自己些个IHttpModule,使用HttpWorkerRequest来读取。
所有的asp.net的大附件上传都是这么做的。
有现成的代码可以搜搜
[解决办法]

C# code
#region //大文件读取类    public class FileSplitSteamReader : FileStream    {        #region //文件分块读        /// <summary>        /// 用于普通文件读取        /// </summary>        /// <param name="sourceFileName">文件的路径</param>        public FileSplitSteamReader(string sourceFileName)            : base(sourceFileName, FileMode.Open, FileAccess.Read)        {            this.sourceFileName = sourceFileName;        }        /// <summary>        /// 用于大文件读取        /// </summary>        /// <param name="sourceFileName">文件的路径</param>        /// <param name="splitSize">切分大小</param>        public FileSplitSteamReader(string sourceFileName, int splitSize)            : base(sourceFileName, FileMode.Open, FileAccess.Read)        {            this.sourceFileName = sourceFileName;            this.splitSize = splitSize;        }        private string sourceFileName;        /// <summary>        /// 获取文件的路径        /// </summary>        public string SourceFileName        {            get { return sourceFileName; }        }        private long splitSize;        /// <summary>        /// 每次切分文件大小splitSize        /// </summary>        public long SplitSize        {            get { return splitSize; }        }        /// <summary>        /// 文件的大小        /// </summary>        public long FileSize        {            get { return this.Length; }        }        private long readTimes = 1;        /// <summary>        /// 当前读取次数块号        /// </summary>        public long ReadTimes        {            get { return readTimes; }        }        private bool judge = false;        /// <summary>        /// 用于判断是否执行到最后一块.读完为ture,未读完为false.        /// </summary>        public bool Judge        {            get { return judge; }            set { judge = value; }        }        /// <summary>        /// 最后一次读取文件的大小        /// </summary>        public long FinilReadSize        {            get            {                if (splitSize == 0)                    return 1024 * 1024 * 3;                else                    return this.FileSize - (this.FileSize / (long)this.splitSize) * (long)this.splitSize;            }        }        public int CurrentReadSize;        /// <summary>        /// 开始读取文件        /// </summary>        /// <returns>以Bitmap类型返回每次读取文件的内容</returns>        public byte[] SpliteRead()        {            FileBlockSteamReaderEventArgs Fbsr = new FileBlockSteamReaderEventArgs();            byte[] timeReadContect;            this.Seek(splitSize * (readTimes - 1), SeekOrigin.Begin);            if (readTimes < (this.FileSize / this.splitSize + 1))            {                Fbsr.ReadPercent = (int)(((float)this.Position / this.FileSize) * 100);                timeReadContect = new byte[this.splitSize];            }            else            {                timeReadContect = new byte[this.FinilReadSize];                judge = true;                Fbsr.ReadPercent = 100;            }            CurrentReadSize = timeReadContect.Length;            this.Read(timeReadContect, 0, timeReadContect.Length);            FileABlockReadEndEvent(Fbsr);            readTimes++;            return timeReadContect;        }        public event EventHandler<FileBlockSteamReaderEventArgs> ABlockReadEndEvent;        public event EventHandler FinishAllReadEvent;        /// <summary>        /// 文件读取完当前块当前事件        /// </summary>        /// <param name="e"></param>        public void FileABlockReadEndEvent(FileBlockSteamReaderEventArgs e)        {            if (ABlockReadEndEvent != null)            {                this.ABlockReadEndEvent(this, e);            }        }        /// <summary>        /// 文件读取完最后一块的事件        /// </summary>        public void FileFinishAllReadEvent()        {            if (FinishAllReadEvent != null)            {                this.FinishAllReadEvent(this, new EventArgs());            }        }        #endregion    }    public class FileBlockSteamReaderEventArgs : EventArgs    {        private int readPercent;        public int ReadPercent        {            get { return readPercent; }            set { readPercent = value; }        }    }     #endregion 


[解决办法]
StreamReader reader = new StreamReader(@"C:\filename.txt");
while (!reader.EndOfStream)
{
//读一行
string strLine = reader.ReadLine();
}
[解决办法]

探讨
sFile = new FileStream(Server.MapPath(flvName), FileMode.Open, FileAccess.Read);
sFile.Seek(seekat, SeekOrigin.Begin);
int offset = 0;
int incnum = sFile.Read(byData, offset, byData.Length);
while (incnum > 0)
{
offset += incnum;


[解决办法]
c#大文件读取和写入数据库(带进度条的源代码)

很好!

热点排行