1

J'ai une application ASP.NET MVC sur Windows Server 2008.File.OpenText de asp.net ne peut pas lire le fichier téléchargé

J'ai besoin de télécharger un fichier, enregistrez-le dans un dossier d'archive dans le dossier App_Data, puis ouvrez-le et lisez-le. Je peux le faire sur ma machine locale mais je ne peux pas le faire sur le serveur de test. Je suspecte que c'est un problème d'autorisation mais les permissions semblent être en place. Le code C# correspondant:

HttpPostedFileBase hpf = Request.Files[0]; 
var fileLength = hpf.ContentLength; 
if (fileLength != 0) 
{ 
    var archiveFolder = Server.MapPath("~/" + folder); 
    var archiveFile = "import_" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".txt"; 
    var archivePath = Path.Combine(archiveFolder, archiveFile); 
    hpf.SaveAs(archivePath); 
} 

Le code ci-dessus enregistre le fichier correctement.

StreamReader sr = File.OpenText(archivePath); 

La ligne ci-dessus renvoie une erreur:

Could not find file 'c:\windows\system32\inetsrv\usb01312012.txt'.

Ainsi, bien que « archivePath » est un chemin vers un fichier enregistré sous App_Data, ASP.NET regarde le dossier SYSTEM pour le fichier.

J'ai donné toutes les autorisations sauf le contrôle total à IIS_USRS sur l'ensemble du site Web. Pourquoi ne puis-je pas accéder au fichier?

+0

Pouvez-vous mettre un point d'arrêt à File.OpenText et vérifier qu'à ce moment-là archivePath détient effectivement le chemin demandé? –

+0

Je ne pense pas que votre code de sauvegarde soit le problème ici. Montrez un peu plus de votre code lu. En un clin d'œil, il semblerait que vous ayez un autre Server.MapPath pour vos codes lus et qu'il échoue, de sorte que vous finissez avec seulement le nom de fichier dans archivePath lorsque vous faites OpenText. – JamieSee

+0

"archivePath" est la chaîne qui contient le chemin utilisé pour enregistrer et lire le fichier. C'est le chemin complet "C: \ ..." – Dewey

Répondre

0

Assurez-vous que votre site exécute la bonne version de asp.net (2.0 ou 4.0).

+0

ASP.NET 4.0 est en cours d'exécution. – Dewey

0

RÉSOLU: Dès le lendemain, cela fonctionne maintenant! Je suppose que IIS a dû recycler? Merci pour vos commentaires!

Questions connexes