1

ユーザーがいくつかの画面からサンプルファイル(Excel)をダウンロードして作業する必要があるアプリケーションを開発しています。そうするための好ましい方法は何でしょう。

私がしていることは

アプリケーションが実行されているディレクトリにファイルを配置し、Application.StartupPath を使用してファイルをダウンロードします。これはあまり良い解決策とは思えません。ユーザーはいつでもファイルを編集したり、ファイルなどを削除したりできます。

私がやりたいことは

リソースにすべてのファイルを追加し、リソースからファイルをダウンロードしたいと考えています。ファイルを追加しましたが、リソースからダウンロードする方法について少し助けが必要です。

ありがとう

4

2 に答える 2

1

Assembly.GetManifestResourceStreamを使用して、ストリームをファイルに保存して操作することができます。簡単な例を次に示します。

using (var resource = Assembly.GetManifestResourceStream("resource_key"))
using (var file = File.OpenWrite(filename))
{
    var buffer = new byte[1024];
    int len;
    while ((len = resource.Read(buffer, 0, buffer.Length)) > 0)
    {
        file.Write(buffer, 0, len);
    }  
}

ご注意ください。ファイルの変更をリソースに戻す方法はありません。

于 2012-05-09T13:57:25.073 に答える
1

あなたが使用することができます:

 class ResourceHelper
    {
           public static void MakeFileOutOfAStream(string stream, string filePath)
            {
                using(var fs = new FileStream(filePath,FileMode.Create,FileAccess.ReadWrite))
                {
                    CopyStream(GetStream(stream), fs);
                }
            }

            static void CopyStream(Stream input, Stream output)
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    output.Write(buffer, 0, read);
                }
            }
 static Stream GetStream(string stream)
        {
             return Assembly.GetExecutingAssembly().GetManifestResourceStream(stream));

        }
    }

ストリーム パスを使用すると、リソースの完全な名前、つまり名前空間 + リソース ファイル名 (エヴァンチュアル フォルダーは名前空間の一部と見なされます) の大文字と小文字が区別されます。プロジェクト内のファイルに埋め込みリソースとしてフラグを立てることを忘れないでください。

于 2012-05-09T14:02:54.340 に答える