微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过networking共享locking行为是不同的

我一直在试图locking一个文件,以便其他克隆的服务不能访问该文件。 然后我读取文件,然后完成后移动文件。 移动是通过使用FileShare.Delete允许的。

但是在后来的testing中,我们发现如果我们正在查看networking共享,这种方法是行不通的。 我赞赏我的做法可能不是最好的,但我的具体问题是:

为什么下面的演示针对本地文件,而不是针对networking文件

更具体的你可以是更好的,因为我发现我的search很less的信息,表明networking共享行为不同于本地磁盘。

C#.NET应用程序在64位环境中运行时抛出ODBC驱动程序不匹配错误

获取.NET枚举的Windows本地化

ComboBoxItem MouseEnter事件不会触发

我怎样才能使菜单forms留在屏幕上,在所有其他应用程序的顶部?

TFS C#API:Workspace.PendAdd地失败

string sourceFile = @"C:TestFile.txt"; string localPath = @"C:MyLocalFolderTestFile.txt"; string networkPath = @"\MyMachineMyNetworkFolderTestFile.txt"; File.WriteallText(sourceFile,"Test data"); if (!File.Exists(localPath)) File.copy(sourceFile,localPath); foreach (string path in new string[] { localPath,networkPath }) { using (FileStream fsLock = File.Open(path,FileMode.Open,FileAccess.ReadWrite,(FileShare.Read | FileShare.Delete))) { string target = path + ".out"; File.Move(path,target); //This is the point of failure,when working with networkPath if (File.Exists(target)) File.Delete(target); } if (!File.Exists(path)) File.copy(sourceFile,path); }

编辑:值得一提的是,如果您希望将文件一个networking共享移到另一个networking共享,同时locking就位,这是有效的。 这个问题似乎只发生在locking的同一个文件共享内的文件

一个小的.NET程序中pipe理临时文件

如何设置.NET框架的作业调度?

在.NET中的远程机器上获取环境variables的真实值

如何关注上次激活的程序?

使用iTextSharp将图像插入到PDF中

我相信System.IO.File.Open()映射到Win32 API函数CreateFile()。 在Microsoft的这个函数的文档[ http://msdn.microsoft.com/en-us/library/aa363858(v=vs.85).aspx ]中,它提到了以下内容

Windows server 2003和Windows XP / 2000:如果在dwDesiredAccess参数的值为DELETE访问标志(0x00010000)时尝试打开要在远程计算机上删除文件或目录,则会发生共享冲突其他访问标志,远程文件或目录尚未使用FILE_SHARE_DELETE打开。 为避免在这种情况下共享冲突,只打开DELETE访问权限的远程文件或目录,或者调用DeleteFile,而不先打开要删除文件或目录。

据此,您将不得不将DELETE作为FileAccess参数传递给IO.File.Open()。 不幸的是,DELETE枚举不包括在内。

此问题仅适用于Windows 2003及更早版本。 我已经在Windows 2008 R2 SP1上测试了你的代码,并且工作正常。 所以它也可能在Windows 2008上运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐