Erreur de sauvegarde de fichier avec des chemins virtuels

This article was translated from English: Does it need improvement?
Translated
View the article in English

Dans les applications ASP.NET, PdfDocument.SaveAs() peut échouer avec une erreur similaire à celle-ci :

IronPDF could not write to the file '~/PDFFiles/mydocument.pdf'. It may be open in a PDF viewer.

Le message pointe vers un fichier verrouillé, mais la vraie cause est généralement le chemin. IronPDF écrit sur le disque et a besoin d'un chemin physique pleinement qualifié, tandis qu'une valeur comme ~/PDFFiles/file.pdf est un chemin virtuel ASP.NET que le système de fichiers ne peut pas résoudre.

Mappez le chemin virtuel vers un chemin physique

Convertissez le chemin virtuel avant de sauvegarder, en utilisant Server.MapPath() dans ASP.NET Web Forms ou HostingEnvironment.MapPath() ailleurs :

string virtualPath = "~/PDFFiles/mydocument.pdf";
string physicalPath = Server.MapPath(virtualPath); // or HostingEnvironment.MapPath outside Web Forms
pdf.SaveAs(physicalPath);
string virtualPath = "~/PDFFiles/mydocument.pdf";
string physicalPath = Server.MapPath(virtualPath); // or HostingEnvironment.MapPath outside Web Forms
pdf.SaveAs(physicalPath);
Imports System.Web

Dim virtualPath As String = "~/PDFFiles/mydocument.pdf"
Dim physicalPath As String = Server.MapPath(virtualPath) ' or HostingEnvironment.MapPath outside Web Forms
pdf.SaveAs(physicalPath)
$vbLabelText   $csharpLabel

Un exemple fonctionnel minimal :

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");
string physicalPath = Server.MapPath("~/App_Data/PDFFiles/output.pdf");
pdf.SaveAs(physicalPath);
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");
string physicalPath = Server.MapPath("~/App_Data/PDFFiles/output.pdf");
pdf.SaveAs(physicalPath);
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://example.com")
Dim physicalPath As String = Server.MapPath("~/App_Data/PDFFiles/output.pdf")
pdf.SaveAs(physicalPath)
$vbLabelText   $csharpLabel

Avant de sauvegarder

  • Le répertoire existe : créez le dossier cible et confirmez que l'application a la permission d'écriture sur celui-ci.
  • Fichier non ouvert : assurez-vous que la sortie n'est pas déjà ouverte dans un visualiseur tel qu'Adobe Reader.
  • Emplacements restreints : exécutez avec des permissions suffisantes lors de l'écriture dans des dossiers protégés comme Program Files.
  • Vérifiez le chemin : enregistrez le chemin physique résolu pendant le développement pour confirmer qu'il pointe où vous l'attendez.

AvertissementÉvitez de coder en dur les lettres de lecteur en production ; resolvez les chemins à l'exécution afin que l'application fonctionne dans tous les environnements.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer ?
Nuget Téléchargements 20,296,129 | Version : 2026.7 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronPdf
exécuter un échantillon Regardez votre code HTML se transformer en PDF.