0

ユーザーが指定されたテキストボックスにテキストを入力し、createNewFile ボタンをクリックすると、SaveAs ダイアログボックスがポップアップし、ユーザーは場所を参照して必要に応じてファイルを保存する必要があります。

私はいくつかのことを試しましたが、
1.ダイアログボックスはアプリケーションの背後にあります
2.実行すると、ダイアログボックスが3回開き、3回実行されることを意味します

投稿に返信

protected void btnNewFile_Click(object sender, EventArgs e)
{
    StreamWriter sw = null;
    try
    {
        SaveFileDialog sdlg = new SaveFileDialog();
        DialogResult result = sdlg.ShowDialog();
        sdlg.InitialDirectory = @"C:\";
        sdlg.AddExtension = true;
        sdlg.CheckPathExists = true;
        sdlg.CreatePrompt = false;
        sdlg.OverwritePrompt = true;
        sdlg.ValidateNames = true;
        sdlg.ShowHelp = true;
        sdlg.DefaultExt = "txt";
        string file = sdlg.FileName.ToString();
        string data = txtNewFile.Text;

        if (sdlg.ShowDialog() == DialogResult.OK)
        {
            sw.WriteLine(txtNewFile.Text);
            sw.Close();
        }

        if (sdlg.ShowDialog() == DialogResult.Cancel)
        { sw.Dispose(); }
    }
    catch
    { }
    finally
    {
        if (sw != null)
        {
            sw.Close();
        }
    }
}

private void Save(string file, string data)
{
    StreamWriter writer = new StreamWriter(file);
    SaveFileDialog sdlg1 = new SaveFileDialog();

    try
    {
        if (sdlg1.ShowDialog() == DialogResult.OK)
        {
            writer.Write(data);
            writer.Close();
        }
        else
            writer.Dispose();
    }
    catch (Exception xp)
    {
        MessageBox.Show(xp.Message);
    }
    finally
    {
        if (writer != null)
        {
            writer.Close();
        }
    }
}

私はこれを試しました。

4

4 に答える 4

0

SaveFileDialogは Windows フォーム コントロールであり、Web サイトでは機能しません。

デフォルトでは処理できないストリームをサーバーが送信するたびに、ブラウザーは「このファイルをどうしたいですか」ダイアログを表示します。残念ながら、ほとんどのブラウザーはテキスト ストリームを処理できるため、それらをユーザーに表示するだけです。

しかし、このようなものはあなたを動かすはずです:

protected void btnNewFile_Click(object sender, EventArgs e)
{
   // Clear the response buffer:
   Response.Clear();

   // Set the output to plain text:
   Response.ContentType = "text/plain";

   // Send the contents of the textbox to the output stream:
   Response.Write(txtNewFile.Text);

   // End the response so we don't get anything else sent (page furniture etc):
   Response.End();
}

しかし、前述したように、ほとんどのブラウザーはプレーン テキストに対応できるため、ブラウザーに嘘をついてアプリケーションの種類を渡す必要があるかもしれませんが、一部のマシンではダウンロードの有用性が制限される可能性があります。

于 2009-11-17T11:12:54.313 に答える
0

Winforms環境でこれを試していると思います。ここでの問題は、ダイアログを 3 回ポップするコードで .ShowDialog への 3 つの呼び出しを発行していることです。ShowDialog を 1 回呼び出すだけで、結果を保存して以下のようにのみ使用できます。

        DialogResult result = sdlg.ShowDialog();

        if (result == DialogResult.OK)            
        {                
            sw.WriteLine(data);                
            sw.Close();            
        }
        else if (result == DialogResult.Cancel)
        { 

        }
于 2009-11-17T11:56:05.803 に答える
0

ASP.NET には [名前を付けて保存] ダイアログ ボックスはありません。ただし、アプリケーションでサーバー上にファイルを生成し、それをユーザーに送り返すように強制することはできます。

string userProvidedText               = uiTextBox.Text; // this is your textbox
byte[] userProvidedTextAsBytes        = null;

if (!string.IsNullOrEmpty(userProvidedText )) {
  System.Text.ASCIIEncoding encoding  = new System.Text.ASCIIEncoding();
  userProvidedTextAsBytes             = encoding.GetBytes(userProvidedText);
}

Response.AppendHeader("Content-Disposition", "attachment; filename=YourFileName.html");
Response.ContentType = "text/HTML";
Response.BinaryWrite(userProvidedTextAsBytes);
Response.End();

このコードが実行されると、アプリケーションは「その場で」 YourFileName.html を生成し、それをユーザーに返します。この時点で、ブラウザは結果の出力をインターセプトし、その特定のファイルをどうするかをユーザーに尋ねます。

代替テキスト http://www.cyphersec.com/wp-content/uploads/2009/04/output1.png

:以前に保存したファイルを提供する場合は、 Response.TransmitFile()を使用します。その背後にある理由は、TransmitFile が非常に効率的であることです。これは、基本的にファイル ストリーミングを IIS にオフロードし、ファイルがカーネルにキャッシュされる可能性があるためです (IIS のキャッシュ ルールに基づく)。

于 2009-11-17T12:15:25.903 に答える