26

私がやりたいのは、次のようなことです。

using System.Data.SQLite;
using System.IO;

//My SQLite connection
SQLiteConnection myCon;

public void ReadAndOpenDB(string filename)
{
    FileStream fstrm = new FileStream(filename, FileMode.Open);
    byte[] buf = new byte[fstrm.Length];
    fstrm.Read(buf, 0, (int)fstrm.Length);
    MemoryStream mstrm = new MemoryStream(buf);

    //Do some things with the memory stream

    myCon = new SQLiteConnection(/*attach to my memory stream for reading*/);
    myCon.Open();

    //Do necessary DB operations
}

インメモリDBに書き込む予定はありませんが、プログラムに接続する前に、プログラムのメモリ内にあるファイルを使用していくつかのことを実行できる必要があります。

4

2 に答える 2

3

Interop を使用してCreateFile()に直接移動することを気にしない場合(その後、返された HANDLE を FileStream にラップする)、FILE_ATTRIBUTE_TEMPORARY を指定してファイルを作成することを検討できます。キャッシュ メモリが使用可能で、ハンドルが閉じられるとファイルが自動的に削除されます。

FILE_ATTRIBUTE_TEMPORARY 属性を指定すると、ハンドルが閉じられた後にアプリケーションが一時ファイルを削除するため、十分なキャッシュ メモリが使用可能な場合、ファイル システムはデータを大容量ストレージに書き戻すことを回避します。その場合、システムはデータの書き込みを完全に回避できます。前述のフラグと同じ方法でデータ キャッシングを直接制御するわけではありませんが、FILE_ATTRIBUTE_TEMPORARY 属性は、書き込みを行わずにできるだけ多くをシステム キャッシュに保持するようにシステムに指示するため、特定のアプリケーションでは懸念される場合があります。

于 2011-06-06T19:48:37.237 に答える