我在應用程序中保存了一些批處理文件作爲資源。 我想訪問運行時文件 - 所以我試圖文件的資源文件夾這個文件,但我得到一個異常的如何訪問我保存爲資源的批處理文件?
「資源文件夾不存在」
我想通過該代碼查找資源文件
var allBatchFiles = Directory.GetFiles(string.Format(@"..\..\Resources\"));
那麼如何使這項工作?
我在應用程序中保存了一些批處理文件作爲資源。 我想訪問運行時文件 - 所以我試圖文件的資源文件夾這個文件,但我得到一個異常的如何訪問我保存爲資源的批處理文件?
「資源文件夾不存在」
我想通過該代碼查找資源文件
var allBatchFiles = Directory.GetFiles(string.Format(@"..\..\Resources\"));
那麼如何使這項工作?
至少有兩種類型,你可能指的是資源。
首先,如果您指的是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");
請注意,當您在Visual Studio中運行應用程序時,它將從bin
子文件夾執行,該子文件夾會更改相對路徑。
但是,如果你想嵌入批處理文件到你的應用程序,你完全是在錯誤的軌道上。資源被編譯到您的EXE
中,您需要使用其他方法來檢索它。下面的MSDN文章給出瞭如何可以做到這一點的例子:
嘗試這種方式已經=>這不工作:( – Yanshof