4

Windowsフォームアプリケーションでは、ファイルがbyte[].

ユーザーがボタンをクリックすると、ファイルをローカルに保存せずに開きたいです。これは可能ですか?もしそうなら、どのように?

または、バイト配列をローカル ファイルとして保存し、このファイルを実行する必要がありますか?

ありがとう、カール

4

1 に答える 1

7

アプリケーションで開く場合 (Windows で適切な拡張子のファイルをダブルクリックした場合と同様)、その内容をファイルに書き込む必要があります。

/// <summary>
/// Saves the contents of the <paramref name="data"/> array into a 
/// file named <paramref name="filename"/> placed in a temporary folder,
/// and runs the associated application for that file extension
/// in a separate process.
/// </summary>
/// <param name="data">The data array.</param>
/// <param name="filename">The filename.</param>
private static void OpenInAnotherApp(byte[] data, string filename)
{
    var tempFolder = System.IO.Path.GetTempPath();
    filename = System.IO.Path.Combine(tempFolder, filename);
    System.IO.File.WriteAllBytes(filename, data);
    System.Diagnostics.Process.Start(filename);
}

使用法:

var someText = "This is some text.";
var data = Encoding.ASCII.GetBytes(someText);

// open in Notepad
OpenInAnotherApp(data, "somename.txt");

ファイル名は拡張子にのみ必要であることに注意してください。おそらくランダムGuidまたは何かを使用し、既知の MIME タイプに基づいて拡張子を追加する必要があります。

于 2013-09-12T12:33:13.187 に答える