【问题标题】:File path for project files?项目文件的文件路径?
【发布时间】:2012-09-02 08:54:20
【问题描述】:

我正在使用 C# 开发媒体播放器,但是当我想进行测试时遇到了问题。

我必须创建一个具有以下路径的新对象歌曲:

@"C:\Users\Jesus Antonio\Desktop\JukeboxV2.0\JukeboxV2.0\Datos\ich will.mp3"

它可以工作,但是当我更换计算机时,我必须重写整个路径, 我的项目叫 JukeboxV2.0

在java中我记得你可以只写路径

@"JukeboxV2.0\JukeboxV2.0\Datos\ich will.mp3"

这将节省大量时间,因为我可以将我的项目带到不同的计算机上并且它可以工作,但是我不知道该怎么做,有人知道吗?

【问题讨论】:

  • “你试过什么”?当您尝试 Java 中的相对路径时会发生什么?
  • 澄清您是否将您的测试与您的应用程序打包在一起?如果是这样,您应该将安装路径存储在注册表中并使用该键查找已安装文件的路径。或者为了在测试实验室中进行测试,将 Mp3 作为独立于文件目录的项目资源或将 mp3 资源保存到已知文件位置。
  • @Jeremy:这个问题是关于嵌入式资源的,但这是关于根目录解析的。
  • 这可能是一个很好的其他解决方案:stackoverflow.com/questions/5608684/…

标签: c# .net path


【解决方案1】:

您可以执行这样的操作来获取应用程序环境文件夹中的路径“Data\ich_will.mp3”。

string fileName = "ich_will.mp3";
string path = Path.Combine(Environment.CurrentDirectory, @"Data\", fileName);

在我的情况下,它将返回以下内容:

C:\MyProjects\Music\MusicApp\bin\Debug\Data\ich_will.mp3

在我的示例中,我使用 Path.CombineEnvironment.CurrentDirectory。这些非常有用,允许您根据应用程序的当前位置构建路径。 Path.Combine 组合两个或多个字符串来创建位置,Environment.CurrentDirectory 为您提供应用程序的工作目录。

工作目录不一定与您的executable 所在的路径相同,但在大多数情况下应该是相同的路径,除非另有说明。

【讨论】:

【解决方案2】:
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"JukeboxV2.0\JukeboxV2.0\Datos\ich will.mp3")

基本目录 + 你的文件名

【讨论】:

  • 假设应用程序存储在名为“Jukebox”的文件夹中,这将自动引用"C:\Users\Jesus Antonio\Desktop\JukeboxV2.0\JukeboxV2.0\JukeboxV2.0\Datos\ich will.mp3"
【解决方案3】:

我遇到了类似的问题,我的项目中有一个文件,并且想测试一个必须处理从 FS 加载文件并以某种方式处理它们的类。我所做的是:

  • 将文件test.txt 添加到我的测试项目中
  • 在解决方案资源管理器中点击alt-enter(文件属性)
  • 我将BuildAction 设置为ContentCopy to Output Directory 设置为Copy if newer,我猜Copy always 也会这样做

然后在我的测试中,我只需要Path.Combine(Environment.CurrentDirectory, "test.txt") 就可以了。每当编译项目时,它都会将文件(以及它的所有父路径,如果它位于文件夹中)复制到 bin\Debug(或您正在使用的任何配置)文件夹中。

希望这对某人有所帮助

【讨论】:

  • 除非您有充分的理由,否则我建议您使用 Copy if newer 而不是 Copy Always。我们有一个项目,其中有数百个 JS 文件设置为始终复制,每当检测到任何更改时都会强制复制所有文件。在解决之前,该操作造成了相当大的开发人员流失。
  • 另一个使用 Copy if newer 而不是 Copy Always 的原因是,如果您将文件保存在 TFS 版本控制中,TFS VC 将在您签入文件时将文件设置为只读。构建时,文件将以只读方式复制到您的输出文件夹中,随后将相同的文件重新复制到输出文件夹将导致尝试复制只读文件时出错,并可能导致构建失败。您可以使用构建事件命令来解决此问题,以禁用输出文件夹中那些选定文件的只读属性。如果较新,则复制会减少麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2020-11-12
  • 2014-11-05
  • 1970-01-01
相关资源
最近更新 更多