【问题标题】:How to find file in project folder in windows form app如何在 Windows 窗体应用程序的项目文件夹中查找文件
【发布时间】:2020-11-03 15:43:38
【问题描述】:

我有 Windows 窗体应用程序,我在文件夹中有一些文本文件,如图所示。我怎样才能联系到他们并阅读这些文件?

我也尝试了下面的代码,但得到错误value cannot be null. parameter name stream

Assembly asm = Assembly.GetExecutingAssembly();
StreamReader reader = new StreamReader(asm.GetManifestResourceStream("NexoClientApp.JsonRequests.Login.txt"));
string jtext = reader.ReadToEnd();

谢谢

【问题讨论】:

  • 您是否将您的文件作为嵌入资源包含在内?
  • 右键VS中的txt文件,勾选属性为Copy,将最新版本的文件移动到项目bin文件夹中。然后你可以通过简单地在没有路径的情况下在cs中打开文件而不用名称来访问。默认情况下,exe 期望任何文件与 cs 可执行文件位于同一文件夹中。
  • 将这些文件的copy to output 设置为If NewerAlways 并使用相对路径,例如File.ReadAllText("JsonRequests\\Login.txt")。应用程序的默认工作目录是应用程序本身的文件夹,因此您不需要使用GetExecutingAssemblyasm.GetManifestResourceStream 仅用于加载嵌入式资源
  • @PanagiotisKanavos 谢谢伙计,这种方式没问题,您可以添加为答案

标签: c# windows winforms file


【解决方案1】:

确保在构建时复制文件! 请参阅此示例中的文本文件的属性: (如果更新也可以复制)

【讨论】:

    【解决方案2】:

    如果您希望通过保持项目结构将文件作为文件安装在目标系统中,则需要将它们作为磁盘项读取,并创建一个安装程序或简单的 zip 来复制这些文件以根据需要恢复项目结构项目。

    要读取它们,如果每个 VS 项目默认在 bin 文件夹中生成可执行文件:

    var lines = File.ReadAllLines(RootFolderPath + @"JsonRequests\Login.txt");
    
    public string RootFolderPath
      = Directory.GetParent
        (
          Path.GetDirectoryName(Application.ExecutablePath.ToLower()
                                .Replace("\\bin\\debug\\", "\\bin\\")
                                .Replace("\\bin\\release\\", "\\bin\\"))
        ).FullName
      + Path.DirectorySeparatorChar;
    

    我们删除调试或发布文件夹以获取项目/应用根路径,以便能够读取所需的文件。

    如果二进制文件是在另一个文件夹中生成的,请使用它。如果在根本身中,请按原样使用它。如果您更改为具有用于发布和调试的保存文件夹,请进行调整。

    在 WinForms 中,所有获取可执行路径的方法都返回一个默认路径为 debugrelease... 但这里我们需要项目或已安装应用程序的根路径。

    这里我们没有将复制文件设置到解决方案资源管理器中的可执行文件夹,而是将项目结构保存在磁盘上。

    您还可以创建一个资源文件来嵌入您想要的文件并使用GetManifestResourceStream 或使用@FalcoAlexander 答案复制可执行文件夹中的文件并从那里读取。

    【讨论】:

    • .Replace("\\bin\\debug\\", "\\bin\\").Replace("\\bin\\release\\", "\\bin\\")) 应该做什么?如果文件被复制到输出目录,如果配置为Debug(假设为默认配置),它们将位于bin\Debug
    【解决方案3】:
    string dir = AppDomain.CurrentDomain.BaseDirectory;
    
    //OR
    
    string dir = Application.StartupPath;
    
    string login = File.ReadAllText(dir+"/JsonRequests/Login.txt"); //read some file
    
    //OR
    
    List<FileInfo> files = new DirectoryInfo(dir).GetFiles().ToList(); //get all info about files in root dir
    

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 2019-02-14
      • 2012-02-13
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多