Как я могу сохранить изображение в файловую систему? - PullRequest
1 голос
/ 03 ноября 2010

Я пытаюсь создать папку в каталоге, где находится файл .exe, и сохранить изображение в этой папке.

Сейчас эта папка не существует, поэтому я хочу, чтобы ее создали,Вот код, который у меня есть:

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

Изображение сохраняется не в pictureFolderPath, а в переменную path.Что мне нужно для этого?

Спасибо за помощь!Вот чем я закончил:

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"));
}

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010

I подозреваю Ваша проблема в том, что ConfigurationManager.AppSettings["picturesFolderPath"].ToString() возвращает пустой путь к папке или, что более вероятно, не заканчивается обратной косой чертой. Это будет означать, что окончательно построенный путь будет выглядеть как c:\dir1.jpg, а не c:\dir\1.jpg, что, как я думаю, вы действительно хотите.

В любом случае, гораздо лучше положиться на Path.Combine, чем пытаться разобраться с комбинационной логикой самостоятельно. Он касается именно таких угловых случаев, плюс в качестве бонуса он не зависит от платформы.

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);
1 голос
/ 03 ноября 2010

Я подозреваю, что ConfigurationManager.AppSettings["picturesFolderPath"].ToString() может быть пустым, поэтому переменная pictureFolderPath устанавливается только на значение path.Убедитесь, что он установлен правильно и значение возвращается.Поместите точку останова в эту строку и проверьте ее в окнах Watch / Immediate.

0 голосов
/ 03 ноября 2010

Вы можете сначала попытаться создать каталог:

Directory.CreateDirectory(pictureFolderPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...