2009-01-08 36 views
2

我有以下代碼:使用C#,我如何在我的項目中將Url屬性設置爲HTML文件?

if (System.IO.File.Exists(htmlLocation)) 
{ 
    vEarthBrowser.ObjectForScripting = this; 
    vEarthBrowser.Url = new Uri(htmlLocation); 
} 
else 
{ 
    throw new Exception("HTML file not found!"); 
} 

htmlLocation被定義爲:

private string htmlLocation = "VirtualEarth.html" 

按說我得到這個從該項目的工作秩序,但我並沒有改變任何代碼。如果我運行這個新的Uri()行會給我一個錯誤,「無效的URI:URI的格式無法確定。」

該文件存在(如通過成功通過If中的Exists()方法所示)。當您希望它在默認應用程序目錄中加載HTML文件時,在WebBrowser控件上引用Url的正確方法是什麼?

編輯:

我要澄清,這是一個WinForms項目,不是一個網絡項目。

+0

嘗試`新的Uri(htmlLocation,UriKind.Relative)` – 2009-01-08 18:38:56

+0

試過這個...得到一個異常,「導航到相對URL不成功。」 – 2009-01-08 18:40:32

回答

3

嘗試將htmlLocation傳遞給Path.GetFullPath()。

這將自動返回當前exe目錄中文件的絕對路徑。

這裏只是一個輔助功能我已經寫了:

public void LoadPageFromDisk(string filePath) 
{ 
    Uri targetPage = null; 

    string workingPageURI = filePath.Trim(); 

    workingPageURI = Path.GetFullPath(workingPageURI); 

    if (Uri.TryCreate(workingPageURI, UriKind.RelativeOrAbsolute, out targetPage) == true) 
    { 

     webBrowserControl.Navigate(targetPage); 
    } 

} 

如果文件路徑參數是說「localfile.htm」,Path.GetFullPath將返回基於當前執行的程序集,例如aboslute路徑它:c:\ Program Files \ MyApp \ localFile.htm。

然後,Uri.TryCreate將您的絕對文件路徑轉換爲有效的文件:// Uri。

最後,WebBrowser.Navigate有一個接受Uri的重載。 (需要使用UriKind.RelativeOrAbsolute以允許TryCreate正確解析絕對文件路徑。)

2

Uri不處理相關路徑。對於驅動器上的文件,您將需要使用file://格式來創建URI。將它與Path.GetFullPath()結合起來,你就應該離開了。

相關問題