saveFileDialog 停止工作 + 从 Internet 下载文件

Posted

技术标签:

【中文标题】saveFileDialog 停止工作 + 从 Internet 下载文件【英文标题】:saveFileDialog stop working + download a file from internet 【发布时间】:2012-08-27 17:25:32 【问题描述】:

我想创建一个更新函数。当出现新版本时,会出现一个输入框,其中有一个下载按钮。当我按下该按钮时,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");
            

        
    

首先我用一个测试按钮试试看功能是否有效,然后我会在输入框中实现。

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

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

【问题讨论】:

First.) 删除第一行“saveFileDialog1.ShowDialog();”没用!!第二。)你如何创建“saveFileDialog1”? 现在有效。问题是,当我使用 Visual C#(运行调试)和 saveFileDialog appers 运行程序时,会崩溃,但如果我尝试使用可执行文件运行应用程序,它将工作!感谢所有的答案! 【参考方案1】:

删除第一行“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 块中,您还应该将“消息”放到输出中。

【讨论】:

我添加了,但是会崩溃!我用你的版本编辑了我的初始消息。 你删除了第一个“saveFileDialog1.ShowDialog();”【参考方案2】:

像这样修改你的代码:

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

   

【讨论】:

那么这意味着你的应用程序在其他地方失败了。 出现 saveFileDialog 时失败。【参考方案3】:

这是你的问题

**DialogResult result = saveFileDialog1.ShowDialog();**

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

SaveFileDialog saveFileDialog1 = new SaveFileDialog();  
// you need to Create an Instance of SaveFileDialog

var result = saveFileDialog1.ShowDialog();
if (result == DialogResult.OK)

  //do your logic here.. 

【讨论】:

我想让人们可以选择文件路径! TransmitFile(FilePath + FileName 应该会提示保存对话框你试过了吗..? 我试试你的代码,但我有一个错误,我不知道如何解决! 不要使用确切的变量将它们替换为您的用例中的变量..还有什么错误..??? 命名空间“System.Web”中不存在类型或命名空间名称“HttpContext”。【参考方案4】:

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

查看this article,了解如何将 WebClient 与 Stream 对象一起使用。

【讨论】:

它在哪里说他正在使用 SilverLight AnDr3yy 请澄清你在这里实现什么类型的网络应用程序.. 我想做一个从网上下载rar的功能!是一个更新功能。我想让人们可以选择保存文件的路径! 你的标题说保存..你能把它改成说下载文件并保存到选定的位置来影响 首先我尝试使用 saveFileDialog,我认为是这样,但不是。 它最初被标记为 Silverlight。不知道它去了哪里。【参考方案5】:

建议将代码重构为:-

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,因为稍后是阻塞调用。

【讨论】:

以上是关于saveFileDialog 停止工作 + 从 Internet 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

SaveFileDialog AddExtension 无法按预期工作

SaveFileDialog AddExtension无法按预期工作

从 SaveFileDialog 创建、写入和打开文本文件

如何从 SaveFileDialog.FileName 仅获取目录名称

SaveFileDialog 现有文件

SL4 saveFileDialog.DefaultFileName 变通