C# 获取C中链接资源的相对路径#

C# 获取C中链接资源的相对路径#,c#,.net,winforms,resources,C#,.net,Winforms,Resources,在我正在从事的一个C#项目中,我有许多链接资源(本例中为文本文件)。我知道资源是通过资源文件中的相对路径链接的。有没有办法从C代码中获得相对路径 如果没有,我要做的就是将资源文件作为命令行参数传递给外部应用程序。如果我不能用第一种方法(这显然是最简单的方法)做这件事,任何其他建议都将不胜感激。谢谢 我认为您可以获取资源,将其保存到一个临时文件夹,然后提供到命令行外部应用程序的路径,这是一种快速而肮脏的方法,但这是主要思想: var assembly = System.Reflection.Ass

在我正在从事的一个C#项目中,我有许多链接资源(本例中为文本文件)。我知道资源是通过资源文件中的相对路径链接的。有没有办法从C代码中获得相对路径


如果没有,我要做的就是将资源文件作为命令行参数传递给外部应用程序。如果我不能用第一种方法(这显然是最简单的方法)做这件事,任何其他建议都将不胜感激。谢谢

我认为您可以获取资源,将其保存到一个临时文件夹,然后提供到命令行外部应用程序的路径,这是一种快速而肮脏的方法,但这是主要思想:

var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var stream = assembly.GetManifestResourceStream("Resources.yourFile.txt");
var tempPath = Path.GetTempPath();
File.Save(stream, tempPath);

// use your tempPath here

编译后,资源文件是dll的一部分。因此,它们不再存在于您分发的文件系统中。如果需要将资源文件作为ressource,那么Hueso的解决方案是将文件传递给外部应用程序的唯一方法

但是,如果您不介意用户可以访问这些文件,您可以将
BuildAction
设置为
Content
,并将
Copy to Output Directory
设置为
Copy if newer
Copy always
。然后将文件复制到输出目录中,并可以从那里访问这些文件。如果文件位于子文件夹中,这些子文件夹也会复制到输出目录中

编辑:

有关各种构建操作及其效果,请参见:


这三行获取您的资源文件并输出到字节数组,然后将其写入磁盘上的文件

byte[] byteArray = new byte[Project.Properties.Resources.File.Length];
Project.Properties.Resources.File.CopyTo(byteArray, 0);

File.WriteAllBytes("Filepath", byteArray);

@jrummell-WinForms(整个项目是一个独立的Windows应用程序)也许这有帮助:@Obalix-我有点困惑。如果我使用嵌入式资源,我认为这些资源只是DLL的一部分。我正在连接资源。这是否意味着在发布时它将成为项目文件结构的一部分?将文件包含到解决方案中并不意味着它将被复制到输出目录。这完全取决于解决方案中文件的
复制到输出目录
。@Jason:我在上一条评论中不太正确,它取决于两个属性(
BuildAction
Copy to Output目录
)在outut目录中发生的情况,以及以前对文件所做的操作(complie编译它,嵌入式资源和资源将其包含在清单中,等等。-有关更多信息,请参阅链接)。