WebClient, мои документы Windows 7 C#

#c# #.net #winforms #webclient

#c# #.net #winforms #webclient

Вопрос:

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

Я пытаюсь загрузить файл через WebClient, я получил простой пользовательский интерфейс с двумя ярлыками, двумя текстовыми полями, одной кнопкой, виджетом savefiledialog. Когда я пытаюсь сохранить файл, который я ввел в первое текстовое поле 1, и, конечно, нажимаю кнопку, чтобы активировать событие, я получаю webexception «Приложение не может получить доступ к файлу, поскольку он используется другим процессом», но вот сделка, я говорю своему приложению создать файл, сохранить содержимое файла из Интернета в новый файл.

Вы можете прочитать дальше из приведенного ниже кода: Кстати, я ничего не получаю из отладки, я думаю, это странно. Должен ли я переходить к точке останова, поскольку я предполагал, что точка останова будет прерываться в конце строки?
Заранее благодарю.

 private void button1_Click(object sender, EventArgs e)
{
    string path = saveFileDialog1.FileName;
    if (textBox2.Text != "")
    {
        string fileExt = textBox2.Text.Substring(textBox2.Text.LastIndexOf('.'));
        saveFileDialog1.Filter = String.Format("fileExt | *{0}",fileExt);
        // http://code.jquery.com/jquery-1.6.1.min.js
        string fileName = textBox2.Text.Substring(textBox2.Text.LastIndexOf('/') 1);
        saveFileDialog1.FileName = fileName;
        DialogResult dResul = saveFileDialog1.ShowDialog();

        if (dResul == DialogResult.OK)
        {
            Debug.WriteLine(client.ResponseHeaders);
            //client.UseDefaultCredentials = NetworkCredential;
            //client.DownloadDataCompleted  = new DownloadDataCompletedEventHandler(client_DownloadDataCompleted);
            client.DownloadFileCompleted  = new AsyncCompletedEventHandler(client_DownloadFileCompleted);

            textBox1.Text = Path.Combine(saveFileDialog1.FileName);

            //client.DownloadFileAsync(new Uri(textBox1.Text), saveFileDialog1.FileName);
            path = saveFileDialog1.FileName;
            Debug.WriteLine(client.ResponseHeaders);
            client.DownloadFile(textBox1.Text, Path.Combine(path));                                     
        }
    }
}
  

Комментарии:

1. Я не вижу кода, в котором вы «указываете моему приложению создать файл», но предполагая, что в какой-то момент вы используете потоки, вам нужно будет явно вызвать Close() их, чтобы освободить файл. Вы также должны вызвать Dispose() в своем диалоговом окне, когда закончите.

Ответ №1:

Убедитесь, что код в client_DownloadFileCompleted не пытается получить доступ к файлу.

Событие DownloadFileCompleted должно использоваться с методом DownloadFileAsync, нет причин использовать события вместе с методами блокировки (DownloadFile).

Ответ №2:

попробуйте это :

удалите textbox2

замените свой код на

 private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                return;
            }
            string extention = Path.GetExtension(textBox1.Text);
            string fileName = Path.GetFileNameWithoutExtension(textBox1.Text);

            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = String.Format("{0} files | *{0}", extention);
            saveFileDialog.FileName = fileName;
            if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                WebClient client = new WebClient();
                client.DownloadFile(textBox1.Text, saveFileDialog.FileName);
            }
        }
  

в текстовом поле 1 введите URL файла, который вы хотите загрузить