C# .NET アプリケーションと、ネットワーク共有 (おそらく Windows Server 2003) でホストされている sqlite データベース ファイルがあります。
問題は、sqlite のよくある質問に、ファイルのロックが信頼できない可能性があると書かれていることです。
したがって、私の質問は、nfs 共有 (このディスカッションを参照)でのみ信頼できないのか、Windows Server 2003 で使用される SMB/CIFS 共有でも信頼できないのかということです。
SMB/CIFS 共有でも信頼できない場合は、次の 2 つの回避策があります。
ロックに一時ファイルを使用:
try
{
using (FileStream fs = File.Create("lock.tmp", 1000,
FileOptions.DeleteOnClose))
{
db.savechanges();
}
}
catch(Exception ex) { /* retry later */ }
ロックに一時ディレクトリの作成を使用します。
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CreateDirectory(string lpPathName,
IntPtr lpSecurityAttributes);
if(CreateDirectory("lock.tmp", IntPtr.Zero))
{
db.savechanges();
Directory.Delete("lock.tmp");
} else { /* retry later */ }