2009-01-08 6 views
2

J'ai le code suivant:En utilisant C#, comment puis-je définir une propriété Url à un fichier HTML dans mon projet?

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

htmlLocation est défini comme:

private string htmlLocation = "VirtualEarth.html" 

Soi-disant le projet, je suis arrivé de c'était en ordre de marche, mais je n'ai pas changé de code. Si je cours cela, la nouvelle ligne Uri() me donne une erreur, "Invalid URI: Le format de l'URI n'a pas pu être déterminé."

Le fichier est présent (comme indiqué en réussissant avec succès la méthode Exists() dans le If). Quelle est la méthode correcte pour référencer une URL sur le contrôle WebBrowser lorsque vous souhaitez charger un fichier HTML dans le répertoire d'application par défaut?

Edit:

Je dois préciser que ce projet est WinForms, pas un projet web.

+0

try 'new Uri (htmlLocation, UriKind.Relative)' –

+0

essayé ceci ... a reçu une exception, "La navigation vers une URL relative a échoué." –

Répondre

3

Essayez de passer htmlLocation à Path.GetFullPath().

Cela renvoie automatiquement un chemin absolu vers le fichier dans le répertoire exe actuel.

est ici une fonction d'aide, je l'ai écrit:

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); 
    } 

} 

Si le paramètre filePath est à dire « localfile.htm », Path.GetFullPath retourne le chemin de aboslute à elle basée sur l'assemblage en cours d'exécution, par exemple : c: \ Program Files \ MyApp \ fichier local.htm. Ensuite, Uri.TryCreate traduit les chemins de fichier absolus pour vous dans un fichier valide: // Uri.

Enfin WebBrowser.Navigate a une surcharge qui accepte l'Uri. (Le UriKind.RelativeOrAbsolute est requis pour permettre à TryCreate d'analyser correctement le chemin du fichier absolu.)

2

Uri ne gère pas les chemins relatifs comme cela. Pour un fichier sur votre lecteur, vous devrez utiliser le format file: // pour créer l'URI. Combinez cela avec Path.GetFullPath() et vous devriez être absent.

+0

J'ai voté cette réponse, mais j'ai marqué l'autre comme la réponse puisque les deux étaient corrects, mais l'autre avait le UriKind.RelativeOrAbsolute qui m'a sauvé un deuxième mal de tête. –

+0

Et il est plus complet, donc il mérite la reconnaissance;) –

Questions connexes