2009-05-19 2 views
2

J'ai écrit ces lignes mais j'ai NullReferenceException. aidez-moi s'il vous plaît comment résoudre ce problème!
La référence d'objet n'est pas définie sur une instance d'un objet?

string FullPath = TempPath + FileName; 
System.Drawing.Image Adimg = null; 
Adimg = System.Drawing.Image.FromFile(MapPath(FullPath)); 

Je mets ces lignes dans une méthode bool publique et TempPath est propriété de classe et est entrée pour FileName la méthode.

exception Detail: 
System.NullReferenceException was unhandled by user code 
    Message="Object reference not set to an instance of an object." 
    Source="System.Web" 
    StackTrace: 
     at System.Web.UI.Page.MapPath(String virtualPath) 
     at FileIO.HasValidAttributes(String FileName) in g:\MyProjects\ASP.net Projects\ADBridge\adengine2\App_Code\FileIO.cs:line 44 
     at UploadPage.<Page_Load>b__0(Object sender1, EventArgs e1) in g:\MyProjects\ASP.net Projects\ADBridge\adengine2\UploadPage.aspx.cs:line 29 
     at System.Web.UI.WebControls.Button.OnClick(EventArgs e) 
     at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 
     at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
     at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
     at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 


Je n'ai pas de temps!

+0

Alors, quel est votre chemin Temp et votre nom de fichier? Il semble à partir de la trace de la pile que le problème se situe – Fry

Répondre

2

Essayez d'appeler MapPath sur l'objet serveur à la place:

HttpContext.Current.Server.MapPath(FullPath) 
2

Voici quelques conseils:

  1. Utilisez Path.Combine pour construire des chemins à partir de morceaux individuels
  2. Vérifiez que FullPath référence à un fichier qui est
    • Présent sur le disque
    • par Lisible le processus Web (c'est-à-dire ne pas exécuter le processus Web sous Compte système ou similaire)
+0

string FullPath = Path.Combine (TempPath, FileName); mais ne fonctionne pas. le problème existe toujours! remarquez que mon fichier est Peresent sur le disque. – mahdiahmadirad

+0

chaîne FullPath = Path.Combine (TempPath, FileName); mais ne fonctionne pas. le problème existe toujours! remarquez que mon fichier est Peresent sur le disque. – mahdiahmadirad

+0

Avez-vous vérifié autre chose, que l'utilisateur du service Web a accès au fichier? –

0

En lisant le "Fullpath = TempPath + FileName", il semble que vous essayez de passer une adresse physique en tant qu'adresse virtuelle?

Est-ce le cas? Pouvez-vous nous donner ce que vous transmettez comme contribution à cette fonction si ce n'est pas le cas? Si c'est le chemin physique, il ne devrait pas être nécessaire d'utiliser MapPath.

Voir here

+0

mon TempPath: chaîne privée _TempPath = "~/Images /"; Chaîne publique TempPath { get {return _TempPath; } set {_TempPath = valeur; } } mon nom de fichier: "imdb.png" – mahdiahmadirad

0

Essayez ceci:

string fullPath = Path.Combine(TempPath, FileName); 
System.Drawing.Image adimg = null; 
if (!String.IsNullOrEmpty(fullPath)) 
{ 
    string serverPath = HttpContext.Current.Server.MapPath(fullPath); 
    if (!String.IsNullOrEmpty(serverPath)) 
     adimg = System.Drawing.Image.FromFile(serverPath); 
} 

Assurez-vous que le MapPath vous donne ce que vous vous attendez.

Questions connexes