使用File.Open(参数和File.Read(路径).Last()

时间:2016-04-12 15:37:43

标签: c# io

我正在使用c#编写项目,并且需要能够在处理其他活动之前读取正在使用的文本文件的最后一行。这是我的代码示例。 File.Open自身工作正常,ReadLines(路径).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);

2 个答案:

答案 0 :(得分:2)

问题在于,两个来电中的每一个 - File.OpenFile.ReadLines - 使用自己的文件系统资源"引擎盖下#34;和您在同一文件上调用File.Readlines之前没有正确处理打开的文件连接。

我的建议是完全摆脱File.Open来电,不需要它(除非你以某种方式使用它,但却没有向我们展示)。 File.Readlines包裹整个一次性模式,并负责为您清理所有内容,即打开文件流。

如果您使用File.Open创建的文件流以您尚未向我们展示的方式,请使用using语句,如下所示:< / p>

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();

即使发生异常,也会负责清理资源。

答案 1 :(得分:1)

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

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

这样就完全无需使用File.Open,因为该方法可以打开,读取和关闭文件。 仅当您的文件足够小以便在内存中保存

时,此功能才有效