C# 使用File.Open(参数和File.Read(path).Last()

C# 使用File.Open(参数和File.Read(path).Last(),c#,io,C#,Io,我正在使用c#进行一个项目,需要能够在处理其他活动之前读取正在使用的文本文件的最后一行。这是我的代码示例。文件.Open本身可以正常工作,ReadLines(path).last()也可以正常工作。总之,它们都不起作用。我是c#新手,希望得到任何帮助。谢谢 string g = "C:\\zebra\\file.txt"; File.Open (g, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

我正在使用c#进行一个项目,需要能够在处理其他活动之前读取正在使用的文本文件的最后一行。这是我的代码示例。文件.Open本身可以正常工作,ReadLines(path).last()也可以正常工作。总之,它们都不起作用。我是c#新手,希望得到任何帮助。谢谢

 string g = "C:\\zebra\\file.txt";

 File.Open (g, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);                                    

string  file_name = File.ReadLines(g).Last();// error of being unable to access file because it's in use

            Thread.Sleep(50);

            Name.Text = file_name.Substring(13); 
            ID.Text = file_name.Substring(8, 5);

您可以使用
File.ReadAllLines
方法,该方法将返回文件行的数组。这可用于获取最后一行,因为您知道数组的长度

string[] lines = File.ReadAllLines(g);
string file_name = lines[lines.GetUpperBound(0)];

这就避免了使用
File.Open
,因为该方法可以一次打开、读取和关闭文件。只有当文件足够小,可以保存在内存中时,这才有效。问题是,这两个调用--
File.Open
File.ReadLines
--都使用了自己的文件系统资源,并且在对同一文件调用
file.Readlines
之前,您没有正确处理打开的文件连接

我的建议是去掉
文件。完全打开
调用,它是不需要的(除非您以某种方式使用它,您还没有向我们展示)。
文件。Readlines
包装了整个一次性模式,并负责为您清理所有东西,即打开的文件流

如果您使用的是由
file.Open
创建的文件流,而您没有向我们展示,那么请使用
using
语句,如下所示:

using (FileStream file = File.Open(g, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    // do your stuff here with your `file` object.
}

// Now do your subsequent/unrelated operations on the file:

string  file_name = File.ReadLines(g).Last();

即使发生异常,这也会清理您的资源。

如果您要使用
读线
,您不需要
文件。打开
,如果您想使用
文件。打开
,不要使用
读线
。谢谢,但我使用了该文件。打开是因为该文件是由另一个应用程序定期写入的链接到我的项目。虽然记事本可以动态打开,所以我使用了它,这样我就可以与其他程序一起访问它。感谢您的回复。我的文件只有几kb大小,在其他程序写入时达到最大约5kb。这就是我使用该文件的原因。打开是因为我需要每次读取它的内容即使其他程序周期性地写入,也是周期性的。有什么方法可以做到这一点吗?这会很好,因为文件在读取后会立即关闭,并且仍然将文件的内容存储在该数组中以供回复。使用代码的唯一问题是它仍然将文本文件视为处于由另一个正在运行的应用程序使用,但不包含该文件。Open attached.Thank。该代码是我在前面的问题中提出的。没有任何其他相关内容我没有显示。我尝试使用了您建议的using语句,但现在它抛出了一个异常,即在项目的调试文件夹中找不到System.IO。