Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# saveFileDialog停止工作+;从internet下载文件_C#_File_Download_Savefiledialog - Fatal编程技术网

C# saveFileDialog停止工作+;从internet下载文件

C# saveFileDialog停止工作+;从internet下载文件,c#,file,download,savefiledialog,C#,File,Download,Savefiledialog,我想创建一个更新函数。当出现新版本时,将出现一个带有下载按钮的输入框。当我按下该按钮时,saveFileDialog将显示以将文件(新版本)保存到我想要的位置 我有这个功能: public void descarcare() { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.CreatePrompt = true; saveFileDialo

我想创建一个更新函数。当出现新版本时,将出现一个带有下载按钮的输入框。当我按下该按钮时,saveFileDialog将显示以将文件(新版本)保存到我想要的位置

我有这个功能:

public void descarcare()
    {

        SaveFileDialog saveFileDialog1 = new SaveFileDialog();

        saveFileDialog1.CreatePrompt = true;
        saveFileDialog1.OverwritePrompt = true;
        saveFileDialog1.FileName = "myText";
        saveFileDialog1.DefaultExt = "txt";
        saveFileDialog1.Filter ="Text files (*.txt)|*.txt|All files (*.*)|*.*";
        saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        DialogResult result = saveFileDialog1.ShowDialog();

        if (result == DialogResult.OK)
        {

            try
            {
                WebClient webClient = new WebClient();
                byte[] receivedData = webClient.DownloadData("http://startut.ro/smartAppointment.rar");
                FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
                BinaryWriter bw = new BinaryWriter(fs);

                bw.Write(receivedData);

                bw.Close();
                fs.Close();
                ((IDisposable)fs).Dispose();
            }
            catch (Exception e)
            {
                string message = e.Message;
                MessageBox.Show("Nu ai o conexiune de internet stabilită. Încearcă să te conectezi la internet, și după aceea să descarci noua versiune !", "EROARE CONEXIUNE INTERNET");
            }

        }
    }
首先,我尝试使用一个测试按钮来查看函数是否工作,然后我将在inputbox中实现

 private void button14_Click(object sender, EventArgs e)
        {
             descarcare();
        }

当我按下按钮时,saveFileDiaglog将出现,并在崩溃后显示。任何saveFileDialog都会出现崩溃。如果我只有一个没有任何代码的saveFileDialog,它将崩溃,问题是saveFileDialog。

对于silverlight,由于安全限制,它们不会提供您正在保存的文件的位置。但是,您可以使用该函数为用户选择的文件获取流对象

了解如何将WebClient与Stream对象一起使用

这是你的问题

**DialogResult result = saveFileDialog1.ShowDialog();**
您需要更改正在执行的代码 DialogResult=saveFileDialog1.ShowDialog(); 到


建议将代码重组为:-

WebClient webClient = new WebClient();    
saveFileDialog1.ShowDialog();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler (FileDownloaded);//Implement this method to notify the download.

   if (saveFileDialog1.ShowDialog() == DialogResult.OK)
   {

       try
       {               
           webClient.DownloadFileAsync("http://startut.ro/smartAppointment.rar", saveFileDialog1.FileName);
       }
       catch (Exception e)
       {
           string message = e.Message;
           MessageBox.Show("Nu ai o conecsiune de internet stabilită. Încearcă să te conectezi la internet, și după aceea să descarci noua versiune !", "EROARE CONECSIUNE INTERNET");
       }

   }
此外,saveFileDialog1.FileName提供了文件必须保存的完整路径,因此不应成为问题


但是,我建议使用
webClient.DownloadFileAsync
而不是
webClient.DownloadFile
,因为后面的调用是阻塞调用。

修改代码如下:

   saveFileDialog1.ShowDialog();

   if (saveFileDialog1.ShowDialog() == DialogResult.OK)
   {

       try
       {
           WebClient webClient = new WebClient();
           byte[] receivedData = webClient.DownloadData("http://startut.ro/smartAppointment.rar");
           FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
           BinaryWriter bw = new BinaryWriter(fs);

           bw.Write(receivedData);

           bw.Close();
           fs.Close();

       }
       catch (Exception e)
       {
           string message = e.Message;
           MessageBox.Show("Nu ai o conexiune de internet stabilită. Încearcă să te conectezi la internet, și după aceea să descarci noua versiune !", "EROARE CONEXIUNE INTERNET");
       }

   }
删除第一行“saveFileDialog1.ShowDialog();”它是无用的

除去

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
从函数descarcare()

您应该这样创建它

public partial class Form1: Form
{
....
    internal SaveFileDialog SaveFileDialog1;
....

    public Form1() : base()
    {   
                ....
                this.SaveFileDialog1 = new SaveFileDialog();
                ....
为了获得更好的代码,应该将SaveFileDialog1设置为类似这样的设置

....
SaveFileDialog1.CreatePrompt = true;
SaveFileDialog1.OverwritePrompt = true;
SaveFileDialog1.FileName = "myText";
SaveFileDialog1.DefaultExt = "txt";
SaveFileDialog1.Filter = 
            "Text files (*.txt)|*.txt|All files (*.*)|*.*";
SaveFileDialog1.InitialDirectory = 
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DialogResult result = SaveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
            {

                try
....

在catch块中,您还应该将“消息”放在输出中

上面说他在哪里使用SilverLight和R3YY请澄清您在这里实现的web应用程序的类型..我想制作一个从internet下载rar的函数!是一个更新函数。我想让人们可以选择保存文件的路径!你的标题是“保存”。。你能把它改成“下载文件并保存到选定位置”吗?首先,我尝试使用saveFileDialog,我认为这是一种方式,但事实并非如此。它最初被标记为Silverlight。不知道它去了哪里。我想让人们可以选择文件路径!TransmitFile(FilePath+FileName应提示保存对话框您尝试过吗?。我尝试过您的代码,但我有一个错误,我不知道如何解决!不要使用确切的变量,将它们替换为用例中的变量。。还有,您遇到了什么错误?。类型或命名空间名称“HttpContext”命名空间“System.Web”中不存在。这表示您的应用程序在其他地方失败。当出现saveFileDialog时,应用程序正在失败。首先。)删除第一行“saveFileDialog1.ShowDialog();”它没有用!!第二)如何创建“saveFileDialog1”?现在可以使用了。问题是,当我用Visual C#(运行调试)运行程序时,saveFileDialog appers将崩溃,但如果我尝试用可执行文件运行应用程序,它将工作!谢谢你的回答!我补充说,但还是会崩溃!我用您的版本编辑我的初始邮件。您是否删除了第一个“saveFileDialog1.ShowDialog();”
....
SaveFileDialog1.CreatePrompt = true;
SaveFileDialog1.OverwritePrompt = true;
SaveFileDialog1.FileName = "myText";
SaveFileDialog1.DefaultExt = "txt";
SaveFileDialog1.Filter = 
            "Text files (*.txt)|*.txt|All files (*.*)|*.*";
SaveFileDialog1.InitialDirectory = 
            Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DialogResult result = SaveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
            {

                try
....