Загрузка файлов в WPF - PullRequest
3 голосов
/ 29 июля 2010

Я пытаюсь создать пользовательский элемент управления загрузкой файлов в WPF 4.0, и я застрял в одной точке.
Я не могу сохранить файл в папке с моим решением после просмотра файла. Ниже код, который я использую для просмотра

private void btnBrowse_Click(object sender, RoutedEventArgs e)
        {
            // Create OpenFileDialog

            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.Filter = "Images (*.JPG;*.JPEG;*.PNG)|*.JPG;*.JPEG;*.PNG";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                string filename = dlg.FileName;
                FileNameTextBox.Text = filename;
            }
        }

 private void btnUpload_Click(object sender, RoutedEventArgs e)
        {

            string filename = FileNameTextBox.Text;
           // Now I want save this file to my image folder.
        }

Теперь я хочу сохранить файл в папке изображений, которая находится внутри моего решения Solution. Для ASP.NET мы используем Server.Mappath для сопоставления указанного относительного или виртуального пути с соответствующим физическим каталогом на сервере. Но я не уверен, что мы можем использовать в WPF для достижения того же. Я новичок в WPF, поэтому, пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 29 июля 2010

Если вы говорите о WPF, а не о Silverlight, тогда важно понимать разницу между WPF и ASP.NET. ASP.NET - это хостинговая платформа для протокола HTTP. Пути на сайте ASP.NET не обязательно представлены непосредственно на диске, поэтому Server.MapPath позволяет сопоставить путь ASP.NET с физическим путем.

WPF, с другой стороны, является простым и просто структурой пользовательского интерфейса. Это не такая хостинговая среда, как ASP.NET, поэтому концепция сопоставления путей не имеет значения в контексте WPF. Исходя из предоставленного вами кода, вы не " загружаете " файл, вы просто открываете файл. В WPF логика ваших приложений работает непосредственно в пользовательской системе, и поэтому у вас есть доступ к файловой системе через пространство имен System.IO. Вы можете создать новый файл, используя класс FileStream , и скопировать байты из источника в новый файл вручную или просто скопировать «открытый» файл, используя класс File . Ваш пользовательский интерфейс WPF предоставляет окно в обычное «настольное» приложение, поэтому при открытии или сохранении файла загрузка файлов не должна (и, скорее всего, не будет).

Имейте в виду, что поскольку ваше приложение является настольным приложением, вы будете ограничены набором разрешений пользователя, запускающего ваше приложение. Если пользователь, запускающий ваше приложение, не имеет разрешения на запись где-то на диск, то при попытке записи вы столкнетесь с исключениями. То же самое происходит, если у них нет разрешения на чтение или удаление файлов откуда-либо. Убедитесь, что все выполняемые вами действия с файлами выполняются в тех областях файловой системы, на которые у пользователя есть разрешение, например в папке с документами.

public void btnUpload_Click(object sender, RoutedEventArgs e)
{
    string filename = FileNameTextBox.Text;
    if (File.Exists(filename))
    {
        // TODO: Show an error message box to user indicating destination file already uploaded
        return;
    }

    string name = Path.GetFileName(filename);
    string destinationFilename = Path.Combine("C:\\temp\\uploaded files\\", name); 

    File.Copy(filename, destinationFilename);

    // TODO: Show information or message box indicating file has copied
}
...