我将一些批处理文件作为资源保存在我的应用程序中。我想在运行时访问这个文件 - 所以我试图在资源文件夹中归档这个文件,但我得到一个例外,即
“资源文件夹不存在”
我试图通过这段代码找到资源文件
var allBatchFiles = Directory.GetFiles( string.Format( @"..\..\Resources\" ) );
那么如何使这项工作?
我将一些批处理文件作为资源保存在我的应用程序中。我想在运行时访问这个文件 - 所以我试图在资源文件夹中归档这个文件,但我得到一个例外,即
“资源文件夹不存在”
我试图通过这段代码找到资源文件
var allBatchFiles = Directory.GetFiles( string.Format( @"..\..\Resources\" ) );
那么如何使这项工作?
请注意,当您在 Visual Studio 中运行应用程序时,它会从bin
更改相对路径的子文件夹中执行。
但是,如果您想将批处理文件嵌入到您的应用程序中,那么您就完全走错了路。该资源被编译到您的. 文件EXE
中,您需要使用不同的方法来检索它。下面的 MSDN 文章给出了一个如何做到这一点的例子:
您可能指的是至少两种类型的资源。
首先,如果您指的是 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");