如何访问我保存为资源的批处理文件?

时间:2013-07-09 06:48:51

标签: c#

我在应用程序中保存了一些批处理文件作为资源。 我想在运行时访问这个文件 - 所以我试图在Resource文件夹上存档这个文件,但是我得到一个例外

  

“资源文件夹不存在”

我试图通过此代码找到资源文件

var allBatchFiles = Directory.GetFiles( string.Format( @"..\..\Resources\" ) );

那么如何使这项工作?

2 个答案:

答案 0 :(得分:3)

请注意,在Visual Studio中运行应用程序时,它会从bin子文件夹执行,该子文件夹会更改相对路径。

但是,如果您想批处理文件嵌入到您的应用程序中,那么您完全走错了路。资源将编译到您的EXE中,您需要使用其他方法来检索它。以下MSDN文章提供了如何完成此操作的示例:

答案 1 :(得分:1)

您可能指的是至少两种类型的资源。

首先,如果您指的是RESX文件,那么通常您可以直接访问资源。所以如果你有一个名为" MyRes.resx"的RESX文件用其中的资源称为" MyString"然后你可以使用:

string contents = Resources.MyRes.MyString;

如果要将文件添加到解决方案并将其标记为嵌入式资源,则可以使用Assembly.GetManifestResourceStream来访问数据。这是我使用的实用功能:

public static Stream GetResourceStream(string pathName, string resName, Assembly srcAssembly = null)
{
    if (srcAssembly == null) srcAssembly = Assembly.GetCallingAssembly();
    var allNames = srcAssembly.GetManifestResourceNames();
    return srcAssembly.GetManifestResourceStream(pathName + "." + resName);
}
public static string GetResourceString(string pathName, string resName, Assembly srcAssembly = null)
{
    if (srcAssembly == null) srcAssembly = Assembly.GetCallingAssembly();
    StreamReader sr = new StreamReader(GetResourceStream(pathName, resName, srcAssembly));
    string s = sr.ReadToEnd();
    sr.Close();
    return s;
}

pathName有点棘手 - 它是项目的名称加上项目中的任何文件夹名称。所以如果你有一个项目" MyApp"使用名为" MyResources"的文件夹使用名为" Batch.txt"的文件标记为资源,然后您将使用以下内容访问内容:

string contents = GetResourceString("MyApp.MyResources", "Batch.txt");