C# windows服务器网络驱动器上的文件锁定可靠吗?

C# windows服务器网络驱动器上的文件锁定可靠吗?,c#,windows,network-programming,C#,Windows,Network Programming,我有一个C#.NET应用程序和一个托管在网络共享(可能是windows server 2003)上的sqlite数据库文件 问题是sqlite的faq中说文件锁定可能是错误的 所以我的问题是,它是否仅在nfs共享()上不可靠,还是在windows server 2003使用的SMB/CIFS共享上也不可靠 如果它在SMB/CIFS共享上也不可靠,我有以下两种解决方法: 使用临时文件进行锁定: try { using (FileStream fs = File.Create("lock.t

我有一个C#.NET应用程序和一个托管在网络共享(可能是windows server 2003)上的sqlite数据库文件

问题是sqlite的faq中说文件锁定可能是错误的

所以我的问题是,它是否仅在nfs共享()上不可靠,还是在windows server 2003使用的SMB/CIFS共享上也不可靠

如果它在SMB/CIFS共享上也不可靠,我有以下两种解决方法:

使用临时文件进行锁定:

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 */ }
使用临时目录创建进行锁定:

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 */ }

也许您已经不再使用SQLite了,是时候转向为并发访问而显式设计的数据库了?它只是一个小应用程序,我无法强制客户公司为其设置sql server。除了这种服务器,还有其他选择吗?问题是,该公司希望以一种超出其原始设计的方式使用该应用程序。需要进行成本/效益分析,以找到解决方案,维护它并处理其他问题,如扩展与迁移到基于服务器的数据库引擎。它不必是SQL Server。它可以是MySQL或PostgreSQL的免费版本。