读取文本文件的最后一行C#

时间:2014-11-04 16:13:29

标签: c# file-handling

我正在使用以下代码来读取文本文件的最后一行:此代码有什么问题。我已经编写了下面的调试器生成的完整错误。我正在做的错误是什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
//using System.Linq;
namespace fileHandling
{
    class Program
    {
        public void GetDataFromFile()
        {


            // opening stream !!!
            FileStream fo = new FileStream("hello.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fo);

            if (!File.Exists("hello.txt"))
            {
                Console.WriteLine("{0} does not exist.", "hello.txt");

            }

            else
            {
                //string record;
                //record = sr.ReadLine();
                string lastLine = File.ReadLines("hello.txt").Last();
                Console.WriteLine(lastLine);
            }
            sr.Close();
           fo.Close();

        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.GetDataFromFile();
        }
    }
}

错误:

System.IO.IOException was unhandled
  HResult=-2147024864
  Message=The process cannot access the file 'C:\Users\nabeel\Documents\Visual Studio 2013\Projects\fileHandling\fileHandling\bin\Debug\hello.txt' because it is being used by another process.
  Source=mscorlib
  StackTrace:
       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
       at System.IO.StreamReader..ctor(String path, Encoding encoding)
       at System.IO.File.ReadLines(String path)
       at fileHandling.Program.GetDataFromFile() in c:\Users\nabeel\Documents\Visual Studio 2013\Projects\fileHandling\fileHandling\Program.cs:line 32
       at fileHandling.Program.Main(String[] args) in c:\Users\nabeel\Documents\Visual Studio 2013\Projects\fileHandling\fileHandling\Program.cs:line 60
  InnerException:

3 个答案:

答案 0 :(得分:3)

你已经打开了已经锁定文件的FileStream,但是不要用它来读取文件,而是使用File.ReadLines只删除下面的行,这一切都正常。

FileStream fo = new FileStream("hello.txt", FileMode.Open);
StreamReader sr = new StreamReader(fo);

答案 1 :(得分:1)

您在此处打开文件:

FileStream fo = new FileStream("hello.txt", FileMode.Open);

然后你无法关闭它。

你甚至不需要那条线或下面的线。只需删除它们。

(如果您保留这些内容,请使用fo.Close()fo.Dispose()关闭该文件。)

答案 2 :(得分:1)

不要通过FileStream打开它并使用File.ReadLines

删除这些行并查看它是否适合您

FileStream fo = new FileStream("hello.txt", FileMode.Open);
StreamReader sr = new StreamReader(fo);