1

更新用の関数を作成したい。新しいバージョンが表示されると、ダウンロード用のボタンが付いた入力ボックスが表示されます。そのボタンを押すと、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です。

4

5 に答える 5

1

これがあなたの問題です

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

DialogResultを実行しているコードを変更する必要がありますresult=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.. 
}
于 2012-08-27T17:48:00.640 に答える
1

次のようにコードを変更します。

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

   }
于 2012-08-27T17:53:30.410 に答える
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ブロックでは、「メッセージ」も出力に入れる必要があります。

于 2012-08-27T18:46:16.180 に答える
0

Silverlightを使用すると、セキュリティ上の制限により、保存しているファイルの場所がわかりません。ただし、OpenFile関数を使用してユーザーが選択したファイルにStreamオブジェクトを取得することはできます。

StreamオブジェクトでWebClientを使用する方法については 、この記事を参照してください。

于 2012-08-27T17:35:25.913 に答える
0

コードを次のように再構築することをお勧めします:-

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

于 2012-08-27T17:51:45.943 に答える