2010-11-03 4 views
1

J'essaie de créer un dossier sur le répertoire où le fichier .exe est et enregistrer une image dans ce dossier.Comment enregistrer une image dans le système de fichiers?

Maintenant que ce dossier n'existe pas, j'aimerais créer ce dossier. Voici le code que j'ai:

public void SavePictureToFileSystem(string path, Image picture) 
{ 
    string pictureFolderPath = path + "\\" + ConfigurationManager.AppSettings["picturesFolderPath"].ToString(); 
    picture.Save(pictureFolderPath + "1.jpg"); 
} 

L'image est sauvegardée sur la pictureFolderPath mais à la variable de chemin. De quoi ai-je besoin pour accomplir cela?

Merci pour l'aide! C'est ce que j'ai fini avec:

public void SavePictureToFileSystem(string path, Image picture) 
{ 
    var pictureFolderPath = Path.Combine(path, ConfigurationManager.AppSettings["picturesFolderPath"].ToString()); 
    if (!Directory.Exists(pictureFolderPath)) 
    { 
     Directory.CreateDirectory(pictureFolderPath); 
    } 

    picture.Save(Path.Combine(pictureFolderPath, "1.jpg")); 
} 
+0

Je ne reçois pas d'exception. Le problème est que l'image est sauvegardée dans la variable path avec la chaîne pictureFolderPath en cours d'ajout en tant que fichier Filename. –

Répondre

6

Je suspect votre problème est que ConfigurationManager.AppSettings["picturesFolderPath"].ToString() retourne un chemin de dossier est vide ou, plus probable, ne se termine pas avec un back-slash. Cela signifierait que le chemin construit final finirait par ressembler à c:\dir1.jpg plutôt que c:\dir\1.jpg, ce qui est ce que je pense que vous voulez vraiment.

Dans tous les cas, il est préférable de s'appuyer sur Path.Combine plutôt que d'essayer de gérer vous-même la logique de combinaison. Il traite précisément de ces cas-là, et, en prime, il est indépendant de la plateforme.

var appFolderPath = ConfigurationManager.AppSettings["picturesFolderPath"] 
             .ToString(); 

// This part, I copied pretty much verbatim from your sample, expect 
// using Path.Combine. The logic does seem a little suspect though.. 
// Does appFolder path really represent a subdirectory name? 
var pictureFolderPath = Path.Combine(path, appFolderPath); 

// Create folder if it doesn't exist 
Directory.Create(pictureFolderPath); 

// Final image path also constructed with Path.Combine 
var imagePath = Path.Combine(pictureFolderPath, "1.jpg") 
picture.Save(imagePath); 
+3

+1. Path.Combine est de loin le moyen le plus fiable de s'assurer que le chemin complet est correct. – David

0

Vous pouvez essayer de créer le répertoire premier:

Directory.CreateDirectory(pictureFolderPath); 
1

je soupçonne que ConfigurationManager.AppSettings["picturesFolderPath"].ToString() pourrait être vide, de sorte que la variable pictureFolderPath est uniquement définie sur la valeur path. Assurez-vous qu'il est correctement défini et que la valeur est renvoyée. Mettez un point d'arrêt sur cette ligne et vérifiez-le dans les fenêtres Watch/Immediate.

Questions connexes