0

我正在使用JavaScript metro應用程序,並且我發現要從JavaScript調用C#代碼我必須在我的解決方案中使用Windows運行時組件項目。現在,我需要檢查在「圖片」文件夾中添加到JavaScript metro應用程序中的圖像,如果它們在那裏,我需要將它們複製到應用程序本地文件夾中。從WinRT組件項目的Metro JS項目中訪問圖像文件

首先我嘗試使用方法

Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///images/logo.png")) 

,但它會拋出異常找不到位置/文件路徑。

我認爲這可能是因爲項目的命名空間不同。該圖像是在JavaScript metro應用程序項目中添加的,我試圖從Windows運行時組件項目中使用它。

所以,我想傳遞一個硬編碼的路徑,如圖像文件「E://projects/myProject/myProject/images/logo.png」,並與方法

Windows.Storage.StorageFile.GetFileFromPathAsync(<passed the above path>); 

嘗試,但它拋出異常該文件路徑格式不正確。

我可以在同一解決方案中從Windows運行時組件項目訪問在JavaScript metro應用程序項目中添加的文件嗎?並將其複製到應用程序本地文件夾中?

謝謝。

回答

0

這應該工作,我在一個新的JS項目中用C#中的一個新的WinRT組件嘗試了你的第一行代碼。它工作得很好。你可以在組件中展示更多的整個C#類以及調用它的JS代碼嗎?

下面是我測試的.cs代碼:

using System; 
using Windows.Storage; 

namespace Test2 
{ 
    public sealed class Class1 
    { 
     public async void TestAccess() 
     { 
      StorageFile file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///images/logo.png")); 
     } 
    } 
} 

而且JS代碼來調用它:

var obj = new Test2.Class1(); 
obj.testAccess();    

而且你還證實,logo.png文件是在你的JS項目?

+0

嗨,是的,我能夠訪問圖像文件夾,但我有另一個文件夾「www」,其中有一個子文件夾「IMG」,當我試圖訪問使用Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(新URI( 「MS-APPX:///www/img/logo.png」));它會給出錯誤。我們只能訪問根文件夾而不能訪問子文件夾嗎? – Deeps

+0

應該不是問題...使用圖像/您已經進入包的子文件夾。一件事:在Visual Studio中,右鍵單擊logo.png並選擇屬性。在解決方案資源管理器窗格下方出現的窗格中,查看「Package Action」的含義。如果這是「無」,那麼圖像將不會與包一起被複制;它需要是「內容」。 –