streamreader文件路径

时间:2013-10-28 08:04:25

标签: c# delphi filepath streamreader

在搜索中了解有关streamreader的更多信息时,我遇到了这个问题 StreamReader path changes automatically 发布#2

  

Hans Passant

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

现在我理解"永远不会硬编码文件"在delphi中,我能够根据目录中的文件指定自定义文件路径,即。

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

Delphi,我刚刚使用了一个字符串并将文件名添加到最后,这与上面的代码有什么不同,并且上面有不同的方法吗?

和btw。有人可以更详细地解释一下,使用的方法和变量以及为什么(我还是c#的新手)

2 个答案:

答案 0 :(得分:0)

我认为汉斯在这里说的是,如果您希望文件与您的应用程序代码相关,那么相对于您的应用程序代码 expliclty看起来。不要依赖当前目录作为应用程序的基本位置,因为这不能保证(并且可以在应用程序执行期间更改)。所以代码的作用是:

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

答案 1 :(得分:0)

GetEntryAssembly返回,根据文档:

  

默认情况下可执行流程的程序集   应用程序域,或者是第一个可执行文件   由AppDomain.ExecuteAssembly执行。

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

Assembly.GetEntryAssembly().Location

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

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

Path.Combine simple连接两个路径组件,必要时添加路径分隔符。在Delphi中,你可以使用IOUtils单元中的TPath.Combine。

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

的文件的完整路径
<exedir>\Config\launcher.txt

包含主可执行程序集的目录在哪里,当然只在运行时才知道。

在Delphi和C#中完成任务之间没有什么特别的不同。要使用任一语言构造相同的路径,您可以采用模数语法/方法名称差异完全相同的步骤。

您可能习惯假设工作目录是包含可执行程序集的目录。如果是这样,就失去这种习惯。工作目录对于控制台应用程序是有意义的,对于这样的应用程序,它可以被视为程序的输入。但是不要指望它在GUI程序中是稳定的。并且永远不要假设工作目录包含可执行文件。这个假设是无效的。

另一方面,也许你真的想要一个相对于工作目录的路径。在这种情况下,只需提供文件名,让系统负责其余的工作。