下载文件并自动将其保存到文件夹

Vic*_*olm 10 c# file download save

我正在尝试创建一个用于从我的网站下载文件的UI.该站点具有zip文件,需要将这些文件下载到用户输入的目录中.但是,我无法成功下载该文件,它只是从一个临时文件夹打开.

码:

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
        e.Cancel = true;
        string filepath = null;
            filepath = textBox1.Text;
            WebClient client = new WebClient();
            client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
            client.DownloadFileAsync(e.Url, filepath);
}
Run Code Online (Sandbox Code Playgroud)

完整源代码:http: //en.paidpaste.com/LqEmiQ

小智 20

我的程序完全符合您的要求,没有任何提示或任何内容,请参阅以下代码.

如果它们尚不存在,此代码将创建所有必需的目录:

Directory.CreateDirectory(C:\dir\dira\dirb);  // This code will create all of these directories  
Run Code Online (Sandbox Code Playgroud)

此代码将给定文件下载到给定目录(在前一个代码段创建之后:

private void install()
    {
        WebClient webClient = new WebClient();                                                          // Creates a webclient
        webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);                   // Uses the Event Handler to check whether the download is complete
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);  // Uses the Event Handler to check for progress made
        webClient.DownloadFileAsync(new Uri("http://www.com/newfile.zip"), @"C\newfile.zip");           // Defines the URL and destination directory for the downloaded file
    }
Run Code Online (Sandbox Code Playgroud)

因此,使用这两段代码,您可以创建所有目录,然后告诉下载程序(不会提示您将文件下载到该位置.


dat*_*ore 18

如果您不想使用"WebClient"或/并且需要使用System.Windows.Forms.WebBrowser,例如因为您希望首先模拟登录,则可以使用此扩展的WebBrowser来挂接Windows中的"URLDownloadToFile"方法URLMON Lib并使用WebBrowser的Context

信息:http://www.pinvoke.net/default.aspx/urlmon/URLDownloadToFile%20.html

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace dataCoreLib.Net.Webpage
{
        public class WebBrowserWithDownloadAbility : WebBrowser
        {
            /// <summary>
            /// The URLMON library contains this function, URLDownloadToFile, which is a way
            /// to download files without user prompts.  The ExecWB( _SAVEAS ) function always
            /// prompts the user, even if _DONTPROMPTUSER parameter is specified, for "internet
            /// security reasons".  This function gets around those reasons.
            /// </summary>
            /// <param name="callerPointer">Pointer to caller object (AX).</param>
            /// <param name="url">String of the URL.</param>
            /// <param name="filePathWithName">String of the destination filename/path.</param>
            /// <param name="reserved">[reserved].</param>
            /// <param name="callBack">A callback function to monitor progress or abort.</param>
            /// <returns>0 for okay.</returns>
            /// source: http://www.pinvoke.net/default.aspx/urlmon/URLDownloadToFile%20.html
            [DllImport("urlmon.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern Int32 URLDownloadToFile(
                [MarshalAs(UnmanagedType.IUnknown)] object callerPointer,
                [MarshalAs(UnmanagedType.LPWStr)] string url,
                [MarshalAs(UnmanagedType.LPWStr)] string filePathWithName,
                Int32 reserved,
                IntPtr callBack);


            /// <summary>
            /// Download a file from the webpage and save it to the destination without promting the user
            /// </summary>
            /// <param name="url">the url with the file</param>
            /// <param name="destinationFullPathWithName">the absolut full path with the filename as destination</param>
            /// <returns></returns>
            public FileInfo DownloadFile(string url, string destinationFullPathWithName)
            {
                URLDownloadToFile(null, url, destinationFullPathWithName, 0, IntPtr.Zero);
                return new FileInfo(destinationFullPathWithName);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 你是男人!我花了3天时间寻找那种解决方案! (2认同)

Sam*_*ren 15

为什么不完全绕过WebClient的文件处理部分.也许类似的东西:

    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        e.Cancel = true;
        WebClient client = new WebClient();

        client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DownloadDataCompleted);

        client.DownloadDataAsync(e.Url);
    }

    void client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
    {
        string filepath = textBox1.Text;
        File.WriteAllBytes(filepath, e.Result);
        MessageBox.Show("File downloaded");
    }
Run Code Online (Sandbox Code Playgroud)