2015-01-09 77 views
0

我的WF應用程序需要一個excel文件才能正常工作。有沒有辦法將該文件添加到項目中,並且當用戶安裝我的應用程序時,它會自動將其自身置於默認路徑中?Windows窗體應用程序:在應用程序上添加文件安裝

感謝

+1

是Excel文件要由應用程序在運行時改變(因而需要被安裝在具有寫權限的目錄中的非管理員用戶),或只是能夠從任何地方你決定要加載的資源把它放?如果是後者,我建議將它作爲嵌入式資源並在運行時直接從程序集中讀取它。 – adv12

回答

1

您可以嵌入在文件中的可執行程序集:

  1. 將文件添加到項目中。

  2. 選擇在解決方案資源管理器並打開屬性(F4)的文件。

  3. 將「生成操作」爲「嵌入的資源」。

  4. 在你的代碼,加載資源流,並將其複製到目標文件流:

    var assembly = Assembly.GetExecutingAssembly(); 
    using (var resourceStream = assembly.GetManifestResourceStream("YourNamespace.ExcelFile.xlsx")) 
    using (var targetStream = File.OpenWrite("targetFile.xlsx")) 
    { 
        resourceStream.CopyTo(targetStream); 
    }  
    

    確保YourNamespace,你已經把Excel文件在您的項目目錄結構的命名空間相匹配。

This Knowledge Base article對程序有詳細的解釋。

+0

裝配未找到? – Aldridge1991

+0

System.Reflection.Assembly – Frank

+0

太棒了!完美的作品! – Aldridge1991

0

將文件添加到您的項目,並設置其生成操作爲「複製,如果新」。之後,應該在安裝應用程序時與您的二進制文件一起部署。但是,請注意,此副本應視爲只讀。

如果您需要更改保存到安裝後的文件,那麼你將其複製到用戶的配置文件中的Application Data文件夾:

var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
var writableFilePath = Path.Combine(appDataFolder, "MyApplication\\MyExcelFile.xlsx"); 
// ensure directory exists before copying to it: 
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(writableFilePath)); 

...和使用,而不是隻讀版本的文件只要它已經存在。

相關問題