1

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

“资源文件夹不存在”

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

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

那么如何使这项工作?

4

2 回答 2

3

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

但是,如果您想将批处理文件嵌入到您的应用程序中,那么您就完全走错了路。该资源被编译到您的. 文件EXE中,您需要使用不同的方法来检索它。下面的 MSDN 文章给出了一个如何做到这一点的例子:

于 2013-07-09T06:52:42.603 回答
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");
于 2013-07-09T06:54:28.160 回答