web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois une exception "Impossible de trouver une partie du chemin"?

Je développe un site Web en utilisant Visual Studio 2010. J'essaie de sauvegarder un fichier dans un chemin. Cela fonctionne très bien localhost.

Mais le même code ne fonctionne pas dans IIS. Il montre l'erreur suivante

Détails des exceptions: System.IO.DirectoryNotFoundException: impossible de trouver une partie du chemin "C:\Inetpub\wwwroot\Vendor\cn.jpg".

Impossible de trouver une partie du chemin "C:\Users\shashank\Desktop\ab.csv".

Voici le code:

protected void btnImportFile_Click(object sender, EventArgs e)
{
    sArReportText = File.ReadAllText(txtFilePath.Text.Trim());
    // Set the report Properties to insert Report information
    SetProperties();
}
5
Shashank

Vous êtes peut-être également confronté à ce que je suis: le nom du répertoire contient des caractères inhabituels. Dans mon cas,

Could not find a part of the path 'C:\Web\metBoot\wild iis\DigiCert© Certificate Utility for Windows_files'.

Ce signe de copyright est la question. 

Donc, en utilisant des concepts tirés de Obtenir le nom de fichier court 8.3 à partir d’un nom de fichier long , je convertis d’abord mes chemins en forme abrégée, puis je l’utilise pour obtenir ma liste de fichiers.

            StringBuilder sf = new StringBuilder(300);
            int n = GetShortPathName(sourceFolder, sf, 300);
            if (0 == n)
            {
                tk.write(Marshal.GetLastWin32Error().ToString());
                continue;
            }

...

            IEnumerable<string> fileGroup = Directory.EnumerateFiles(sf.ToString(), ext);
4
bugmagnet

Cela peut être dû au fait que vous n'avez pas le fichier spécifié sur le serveur Web ou que vous utilisez un chemin incorrect. Spécifiez le dossier exact et le nom du fichier en fonction de la manière dont il est stocké sur le serveur Web. utilisez HttpContext.Current.Request.ApplicationPath ou Server.MapPath pour spécifier l'emplacement correct du fichier souhaité. Assurez-vous également que vous avez donné les autorisations de lecture et d'écriture pour ce fichier spécifique et son dossier.

1
Robin Joseph

Pour pouvoir accéder à, créer et supprimer des fichiers sur le serveur, vous devez avoir des droits. Comme dans mon projet, j'utilise la classe Impersonator pour accéder à divers fichiers et dossiers du serveur. Sinon, cela produira une exception.

0
JulyOrdinary

Des autorisations doivent être définies dans IIS pour permettre aux fichiers d'être enregistrés dans le dossier. Fondamentalement, vos fichiers téléchargés doivent être enregistrés dans un dossier distinct, présent dans votre répertoire racine.

0
Bibhu

Considérez comment vous lancez VS aussi. Contre-intuitivement, je ne rencontre ce problème que lorsque j'utilise VS en mode Administrateur. Peut-être une chose de politique de groupe.

0
Ben Power

Vous pouvez utiliser l'emprunt d'identité de code:

http://csharptuning.blogspot.com/2007/06/impersonation-in-c.htmlhttp://www.codeproject.com/Articles/14358/User-Impersonation- in-NET

peu importe, qui que vous utilisiez comme usurpation d'identité doit être capable de lire/écrire à l'emplacement dans lequel vous enregistrez. Nous utilisons cette méthode dans les applications pour supprimer/créer des dossiers sur le réseau. Même si App_Data est la meilleure pratique, il peut s'avérer nécessaire pour les entreprises d'accéder aux documents situés en dehors de ce dossier.

Vous pouvez également définir l'emprunt d'identité sur IIS. 

J'ai également remarqué que votre fonction s'appelle btnImportFile. Vous voudrez peut-être examiner le contrôle FileUpload si vous téléchargez un fichier, ce qui vous permettra d'obtenir le tableau d'octets du fichier et de l'enregistrer au besoin. https://msdn.Microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload%28v=vs.110%29.aspx . Vous devrez peut-être toujours utiliser Server.MapPath ou HttpContext.Current.Request.ApplicationPath en fonction de vos besoins.

0
jmcclure