2016-08-19 130 views
1

我從2012年升級到Visual Studio 2015,它大肆渲染了我。我不能再將WAV文件導入到我的項目資源中,而無需將它轉換成我的代碼不會接受的MemoryStream。我一直在尋找幾個小時,我感到非常沮喪。有人請幫助我嗎?我正在根據這些提示導入文件:How to: Import or Export Resources無法將WAV文件導入到Visual Studio中

讓我知道如果您需要圖片或其他信息。在這一點上我真的很絕望。

+0

什麼樣的對象類型在2012年之前導入它們? – FloatingKiwi

回答

0

鏈接您正在使用VS 2010

打開你的資源文件。默認情況下,左上角菜單是字符串;但有一個小的下拉箭頭。點擊這個,第四個選項是音頻。如果您現在單擊添加現有文件,默認情況下它將過濾.wav文件,並將按照這種方式添加它們。

+0

如果要添加現有文件,則不需要選擇資源類型。資源的類型是從文件中推斷出來的。 – jmcilhinney

+0

是的,但我的意思是,如果您選擇所需的類型,文件類型過濾器是預先設置的。 – 2016-08-19 05:29:20

+0

我明白了。我想我更關注的是「默認情況下它會過濾.wav文件」,而更多的則是「將它們添加爲」,因爲它們會以任何方式添加爲正確的類型。 – jmcilhinney

1

我不確切地知道你在VS 2012中的體驗,但我只是測試了VS 2015,2013和2012年,他們都以完全相同的方式工作。我只是打開項目屬性,選擇資源頁面,單擊添加資源下拉列表,選擇添加現有文件,並導航到我想要的WAV文件。該文件作爲資源添加並且My.Settings的相應屬性將該資源暴露爲類型UnmanagedMemoryStream。正如我所說,在所有三個版本中發生的方式完全相同。如果你在VS 2012中有不同的東西,那麼你在VS 2012中做了一些不同的事情。你沒有告訴我們你做了什麼,所以我們只能猜測。

您的代碼需要什麼類型的數據?也許這也是提供的好信息。如果它是一個Byte數組,那麼你可以得到一個從資源Stream像這樣:

Dim resourceStream = My.Resources.MyWavResource 
Dim length = CInt(resourceStream.Length) 
Dim resourceData(length - 1) As Byte 

resourceStream.Read(resourceData, 0, length) 

這正是你如何從任何Stream讀取到Byte陣列。你可以,如果你需要做其再次,它放入一個方法:

Private Function GetStreamData(stream As Stream) As Byte() 
    Dim length = CInt(stream.Length) 
    Dim data(length - 1) As Byte 

    stream.Read(data, 0, length) 

    Return data 
End Function 

你可以這樣調用它:

Dim data As Byte() 

Using resource = My.Resources.MyWavResource 
    data = GetStreamData(resource) 
End Using 

你甚至可以把它寫成一個擴展方法和然後在Stream本身上調用它。