2013-07-09 75 views
1

我在應用程序中保存了一些批處理文件作爲資源。 我想訪問運行時文件 - 所以我試圖文件的資源文件夾這個文件,但我得到一個異常的如何訪問我保存爲資源的批處理文件?

「資源文件夾不存在」

我想通過該代碼查找資源文件

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

那麼如何使這項工作?

回答

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"); 
3

請注意,當您在Visual Studio中運行應用程序時,它將從bin子文件夾執行,該子文件夾會更改相對路徑。

但是,如果你想嵌入批處理文件到你的應用程序,你完全是在錯誤的軌道上。資源被編譯到您的EXE中,您需要使用其他方法來檢索它。下面的MSDN文章給出瞭如何可以做到這一點的例子:

+0

嘗試這種方式已經=>這不工作:( – Yanshof

相關問題