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

C# 读出文本文件最后50行的内容解决办法

2012-09-18 
C# 读出文本文件最后50行的内容如题。请尽可能详细些。[解决办法]C# codeprivate string getLast50(){string

C# 读出文本文件最后50行的内容
如题。
请尽可能详细些。


[解决办法]

C# code
        private string getLast50()        {            string strSol=string.Empty;            List<string> listFile=new List<string>();            StreamReader objSr =new StreamReader(@"c:\ss.txt",Encoding.Default);            while(!objSr.EndOfStream){                listFile.Add(objSr.ReadLine());            }            if(listFile.Count>50)            {                for (int i = listFile.Count - 50; i < listFile.Count-1; i++)                {                    strSol+=listFile[i]+Environment.NewLine;                }            }else                for(int i=0;i<listFile.Count;i++)                {                    strSol+=listFile[i]+Environment.NewLine;                }            return strSol + listFile[listFile.Count-1];        }
[解决办法]
对1楼的程序的修改:

private string getLast50()
{
string strSol=string.Empty;
List<string> listFile=new List<string>();
StreamReader objSr =new StreamReader(@"c:\ss.txt",Encoding.Default);


while(!objSr.EndOfStream){
listFile.Add(objSr.ReadLine());
if ( listFile.Count > 50 ) // 如果多于50行,就把最前面的一行删掉
listFile.RemoveAt(0);
}

for(int i=0;i<listFile.Count;i++)
{
strSol+=listFile[i]+Environment.NewLine;
}
return strSol + listFile[listFile.Count-1];
}

[解决办法]
这种方式做聊天室你很快就会崩溃的。用个本地的sql express也行啊。
[解决办法]
二进制方式读取,seek到最后往前缓冲区长度的地方,读到缓冲区,分析里面有多少换行符,不够的话,往前seek
[解决办法]
思路被VMM说了。。。
参考如下代码:
C# code
FileStream vFileStream = new FileStream(@"c:\temp\temp.log",     FileMode.Open, FileAccess.Read);byte[] vBuffer = new byte[0x1000];int vReadLength;int vLineCount = 0;int vReadCount = 0;int j = 0;do{    vFileStream.Seek(-vBuffer.Length * ++vReadCount, SeekOrigin.End);    vReadLength = vFileStream.Read(vBuffer, 0, vBuffer.Length);    for (int i = vReadLength - 1; i >= 0; i--)    {        j++;        if (vBuffer[i] == 10) vLineCount++;        if (vLineCount >= 9)        {            if (vReadCount > 1)            {                vBuffer = new byte[vFileStream.Length - j - 1];                vFileStream.Seek(j, SeekOrigin.End);                vReadLength = vFileStream.Read(vBuffer, 0, vBuffer.Length);                j = 0;            }            textBox1.Text = Encoding.Default.GetString(vBuffer,                 vReadLength - j, j);            break;        }    }} while (vLineCount < 50 || vReadLength < vBuffer.Length);if (vLineCount < 50)    textBox1.Text = Encoding.Default.GetString(vBuffer, 0, vReadLength);vFileStream.Close();Text = vLineCount.ToString();
[解决办法]
C# code
            string[] lines = File.ReadAllLines("C:\\test.txt", System.Text.Encoding.Default);//编码看你情况而定            List<string> last50 = new List<string>();//也可以ArrayList last50=new ArrayList();            for (int i = lines.Length - 1; i >= lines.Length - 50 && i >= 0; i--)                last50.Insert(0, lines[i]);
[解决办法]
探讨


ACCESS用的话;考虑到数据不会自动变小。也是个问题。


[解决办法]
思路给你, 一行一行的全读出来,一行一行的倒序保存在List中(也就是总是在index=0的地方插入下一行内容)
然后在List类中删除掉50行以后的内容,

再依次读出来

ArrayList类可以实现

热点排行