C# 读取完全锁定的文本文件或读取 if 语句外部的输出

C# Read text file that is fully locked or read output outside if statement

本文关键字:读取 语句 if 外部 输出 文本 锁定 文件      更新时间:2023-10-16

这个问题已经被问了很多次,但我不确定我是否找到了正确的答案,那就是"这是不可能的"。每次我听到某些事情是不可能的,我都不确定它是否属实。我的意思是必须以某种方式找到解决方案。

这就是我的事情。我正在开发一个 C# 应用程序,该应用程序在某些时候应该读取一个.txt文件以在我的代码中使用。问题是C++文件不断写入此文件。我没有这个项目的来源。

据我了解,即使文件被锁定,也有几种方法可以读取文件。问题是我都试过了。(使用读写、读取、写入、删除等)。似乎什么都没有成功。看起来文件已被锁定。

所以我的问题再次是,如果文本文件被我没有源代码的其他应用程序完全锁定,是否真的有可能无法读取文本文件?难道就没有办法吗?

如果没有,则有以下几种情况。应用程序本身打印出我要从 txt 文件中读取的完全相同的信息。所以我想为什么不直接从应用程序中读取它。问题是,我不确定如何在"if"语句之外做到这一点。

例如,我的代码是:

if (wname.Length )
{
Process compiler = new Process();
compiler.StartInfo.FileName = fn;
compiler.StartInfo.WorkingDirectory = wd;
compiler.StartInfo.UseShellExecute = false;
compiler.StartInfo.RedirectStandardOutput = true;
compiler.StartInfo.CreateNoWindow = true;
compiler.Start();
}

我稍后想做的是:

string result = compiler.StartInfo.ReadToEnd();

这是不可能的,因为"'编译器'这个名字在当前上下文中不存在"。

丢失 IF 语句是不可能的。有什么解决方案吗?

提前谢谢。

">

如果文本文件被其他应用程序完全锁定,是否真的有可能无法读取" - 取决于正在使用的操作系统和文件系统。您不告诉我们您在使用什么,那么我们如何回答?有些系统使用内核强制的强制文件锁,有些系统只使用咨询锁,有些系统可以同时使用两者。

无论如何,你问它是否"可能"——好吧,在极端情况下;如果你绕过操作系统并直接操作磁盘上的原始数据,那么当然是可能的——很难;当然,但有可能。 如果您想留在操作系统的美好世界中,那么这取决于(如上所述)操作系统和文件系统以及使用的文件锁类型。

compiler

是在if (wname.Length)语句的作用域中定义的。 带有错误的行出现在该范围之外,因此您会收到该编译错误。

在外部或 if 语句中定义compiler,然后您将在另一行的范围内使用它。但是,如果您没有在 if 语句之外初始化它,那么您需要在使用之前检查它是否为 null,否则您将获得NullReferenceException

有关 C# 作用域的更多信息