【问题标题】:Read a Text File in Same Folder With App [closed]使用应用程序读取同一文件夹中的文本文件 [关闭]
【发布时间】:2015-10-22 08:40:13
【问题描述】:

我有一个 Windows 窗体应用程序。与应用在同一文件夹中有一个文本文件。

我想读取此文本文件并将其写入富文本框中。我尝试了几件事,但做不到。我该怎么办?

这是我的解决方案浏览器;

这是我的 About.cs:

 private void About_Load(object sender, EventArgs e)
    {
        this.FormBorderStyle = FormBorderStyle.FixedSingle;
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        aboutText.Enabled = false;
        string appPath = Path.GetDirectoryName(Application.ExecutablePath);
        aboutText.Text = File.ReadAllLines(appPath + "TOSandAbout.txt").ToString();

    }

我不能这样阅读。

【问题讨论】:

  • 你试过调试吗?放一个硬编码的路径?在运行此代码之前检查自己的“appPath”中的内容..
  • 运行代码时会发生什么?它找到文件了吗?我敢打赌,如果它确实可以很好地读取文件,但随后您会看到类似System.Array[] 的内容或由于ToString() 而出现的内容。
  • 是的,我调试它返回:"C:\\Users\\fhatipoglu\\Desktop\\Spy\\Lightning\\Lightning.Transporter\\bin\\Debug" 但我会上传这个应用。它必须在其他用户上找到文本文件。文本文件将与应用程序位于同一文件夹中。
  • 您的代码 appPath + "TOSandAbout.txt" 将返回 ...Transporter\\bin\\DebugTOSandAbout.txt 而不是 ...Transporter\\bin\\Debug\\TOSandAbout.txt 使用 Path.Combine
  • 谢谢所有回答我的人。我得到了它。泰。我尝试发布应用程序。并运行。所以它可以读取文件: string fileContents = System.IO.File.ReadAllText("TOSandAbout.txt");但是在VS中工作它无法读取文件。

标签: c# file stream reader


【解决方案1】:

我现在没有 VS,所以没有截图,我不能确定名字,但问题是因为 Visual Studio 将源代码构建到不同的目录中(通常是 bin/Debug/ 或 @ 987654322@ 或类似的东西)。源目录中的每个文件在构建过程中都有一个行为,我相信.txt 的默认值是“不复制”。打开文件 (right click->Properties) 的“属性”对话框,其中显示“构建操作”,确保显示“无”,然后在“复制到输出目录”下选择“如果较新则复制”。这将确保文本文件在您构建时实际上与可执行文件并列(Build Action: None 仅表示无需对该文件进行处理)。

【讨论】:

  • 文本文件的完整路径是“C:\Users\fhatipoglu\Desktop\Spy\Lightning\Lightning.Transporter\TOSandAbout.txt”。但是当其他用户安装这个程序时,我认为它不能在同一个位置。
  • 嗯,是的。这就是为什么告诉 Visual Studio 将文件与其余文件(如可执行文件)一起复制到输出目录的原因。如果您在解决方案中查看隐藏的bin 文件夹,在debug 文件夹内,您将看到您编译的可执行文件(这是从VS 运行程序时运行的文件),但不是文本文件。当您尝试在同一目录中加载文件时,它找不到它。
  • 是的,我明白了。泰。我尝试发布应用程序。并运行。所以它可以读取文件: string fileContents = System.IO.File.ReadAllText("TOSandAbout.txt");但是在VS中工作它无法读取文件。
  • 是的!不要忘记将其标记为答案。 ;P
  • 我做到了 :) Ty 再次
【解决方案2】:

当程序启动时,“当前目录”将(通常)设置为 exe 的位置。在这种情况下,您不必指定任何路径,只需使用"TOSandAbout.txt" 作为路径即可。

如果这不起作用,那是因为文件不存在。如果您将文本文件添加到您的解决方案,默认情况下它会被复制到构建目录。右键单击该文件并点击“属性”,将Copy to Output Directory 更改为Copy alwaysCopy if newer,然后就可以设置了。

【讨论】:

  • 你说得对,克里斯。我做到了。非常感谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 2017-05-24
  • 1970-01-01
相关资源
最近更新 更多