ファイルを exe に含める
◆ ビルドアクションを Resource にする
◆ Application.GetResourceStream でリソースの URI を指定して stream を取得
◆ Application.GetResourceStream でリソースの URI を指定して stream を取得
前に dll をまとめて 1 つのファイルにする方法を書きましたが dll 以外の zip ファイルや画像ファイルなどの普通のファイルも exe に含めることができます
ファイルをプロジェクトに含めて ビルドアクションを Resource にします
出力ディレクトリにコピー は コピーしない を選びます
リソースの URI は pack://application:,,,/ の後にプロジェクトルートからのパスです
プロジェクトのルートに image.jpg ファイルがあるなら
ファイルにアクセスするには Application.GetResourceStream を使って stream を取得します
File Stream を作ってコピーします
ZipArchive に直接 stream を渡せます
ファイルをプロジェクトに含めて ビルドアクションを Resource にします
出力ディレクトリにコピー は コピーしない を選びます
リソースの URI は pack://application:,,,/ の後にプロジェクトルートからのパスです
プロジェクトのルートに image.jpg ファイルがあるなら
pack://application:,,,/image.jpg
となりますファイルにアクセスするには Application.GetResourceStream を使って stream を取得します
ファイルをローカルにコピーする
var uri = new Uri(@"pack://application:,,,/image.jpg");
using (var stream = Application.GetResourceStream(uri).Stream)
using (var fstream = File.Create(@"C:\image.jpg"))
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(fstream);
}
using (var stream = Application.GetResourceStream(uri).Stream)
using (var fstream = File.Create(@"C:\image.jpg"))
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(fstream);
}
File Stream を作ってコピーします
zip を解凍する
var uri = new Uri(@"pack://application:,,,/Resources/file.zip");
using (var stream = Application.GetResourceStream(uri).Stream)
using(var zip = new ZipArchive(stream))
{
zip.ExtractToDirectory(@"C:\zip-extract");
}
using (var stream = Application.GetResourceStream(uri).Stream)
using(var zip = new ZipArchive(stream))
{
zip.ExtractToDirectory(@"C:\zip-extract");
}
ZipArchive に直接 stream を渡せます