文件的流读取器路径

本文关键字:路径 读取 文件 | 更新日期: 2023-09-27 18:37:08

在搜索以了解有关流阅读器的更多信息时,我遇到了这个流读取器路径自动更改帖子 #2 由

汉斯·帕桑特

var exedir = Path.GetDirectory(Assembly.GetEntryAssembly().Location);
var path = Path.Combine(exedir, @"Config'launcher.txt"); using (var
reader = new StreamReader(path)) {
    //... }

现在我了解了"从不对文件进行硬编码"部分,在 delphi 中,我能够根据目录中的文件指定自定义文件路径,即。

读取

目录中的所有文件名,用户选择一个文件名,然后我读取文件的内容

Delphi,我只是使用了一个字符串并将文件名添加到末尾,这与上面的代码有何不同,上面是否有不同的方法?

顺便说一句。有人可以更详细地解释一下使用的方法和变量以及原因(我仍然是 c# 的新手)

文件的流读取器路径

我认为 Hans 在这里说的是,如果您希望文件相对于您的应用程序代码,那么相对于您的应用程序代码进行显式查找。不要依赖当前目录作为应用程序的基本位置,因为无法保证(并且在应用程序执行期间可能会更改)。所以代码的作用是:

  • 获取入口点程序集(具有启动时执行的 Main 方法的程序集),并注意该程序集的文件位置:Assembly.GetEntryAssembly().Location
  • 从以下文件路径获取目录:var exedir = Path.GetDirectory(...);
  • 构造一个相对于此目录的路径:var path = Path.Combine(exedir, @"Config'launcher.txt");
  • 根据最终路径创建读取器:using (var reader = new StreamReader(path)) ...

GetEntryAssembly 根据文档返回:

默认为进程可执行文件的程序集 应用程序域,或第一个可执行文件 由 AppDomain.ExecuteAssembly 执行。

属性返回程序集的完整路径。所以

Assembly.GetEntryAssembly().Location

是可执行文件的完整路径。在 Delphi 中,你可以写 ParamStr(0) 或 Application.ExeFileName。

Path.GetDirectory 去除文件名并离开目录。在Delphi中,您将使用ExtractFilePath。

Path.Combined 简单连接两个路径组件,必要时添加路径分隔符。在Delphi中,您将使用IOUtils单元中的TPath.Combing。

因此,问题中的代码构造了名为

<exedir>'Config'launcher.txt

其中 是包含主可执行程序集的目录,当然只有在运行时才知道。

在 Delphi 和 C# 中完成工作的方式实际上没有什么特别的不同。要用任一语言构造相同的路径,您需要采取完全相同的步骤模语法/方法名称差异。

您可能习惯于假设工作目录是包含可执行程序集的目录。如果是这样,请放弃这个习惯。工作目录对于控制台应用程序有意义,对于此类应用程序,可以将其视为程序的输入。但不要指望它在 GUI 程序中是稳定的。并且永远不要假设工作目录包含可执行文件。这种假设是站不住脚的。

另一方面,也许您确实想要相对于工作目录的路径。在这种情况下,只需提供文件名,让系统处理其余的工作。