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

C# 读取文本文件C的最后一行#,c#,file-handling,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 Pro

我使用下面的代码读取文本文件的最后一行:这段代码有什么问题。我已经在下面编写了调试器生成的完整错误。我会犯什么错误

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:

您可以在此处打开文件:

FileStream fo = new FileStream("hello.txt", FileMode.Open);
然后你没能关上它

你甚至不需要那条线或下面的那条线。把它们取下来


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

您已打开锁定文件的FileStream,但不使用它读取文件,而是使用file.ReadLines删除以下行,一切正常

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

不要通过
FileStream
打开它,而要使用
文件.ReadLines

删除这些行,看看这是否对您更有效

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

我的第一个猜测是该文件在其他程序(文本编辑器等)中打开,并尝试删除filestream和stream读取器,这也可能导致错误。谢谢,我不确定问题是否如此之小,但会给像我这样的初学者带来麻烦!