2011-05-31 17 views
25

Ne yapmak istiyorum aşağıdaki çizgisinde bir şeydir:C#, System.Data.SQLite ile bir bellek içi SQLite veritabanı olarak bağlı bir bellek dosyası olması için herhangi bir yolu var mı?

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 
} 

ben bellek DB yazma planı yok ama dosya ile bazı şeyler yapmak gerekiyor, Programıma bağlanmadan önce, programımdaki bellekte.

+2

Ya SQLite bellek DB kullanmak ve SQLite yoluyla olduğunu manipüle veya geçici dosyaya bellek akışı yazmak ve onu açabilir. –

+0

Bağlamadan önce "dosya ile ne yapmak" için ne tür şeyler gerekir? – RQDQ

+1

Akışı düzenlemek istiyorum. Yukarıdaki yöntem benim için mümkün olmadıkça nedenlerim önemli değil. –

cevap

3

Interop'u kullanmaya ve CreateFile()'a doğrudan gitmeyi (ardından bir FileStream'de döndürülmüş HANDLE'yi sarma) kullanmayacaksanız, dosyayı FILE_ATTRIBUTE_TEMPORARY olarak belirterek dosyayı dosyaya diske yazmayacak şekilde belirtebilirsiniz. Kullanılabilir önbellek var ve tanıtıcı kapatıldığında dosyayı otomatik olarak siler. FILE_ATTRIBUTE_TEMPORARY niteliğini belirleme

yeterli ön bellek varsa bir tanıtıcı kapatıldıktan sonra bir uygulama geçici bir dosya siler çünkü geri yığın depolama veri yazmaya önlemek için dosya sistemlerini neden olur. Bu durumda, sistem verileri yazmayı tamamen engelleyebilir. Önceden belirtilen bayraklarla aynı şekilde veri önbelleğe alma işlemlerini doğrudan kontrol etmese de, FILE_ATTRIBUTE_TEMPORARY özniteliği sistemin sistem önbelleğini yazmadan olabildiğince çok tutacağını söyler ve bu nedenle belirli uygulamalar için endişe kaynağı olabilir.

İlgili konular