我一直在试图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框架的作业调度?
在.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] 举报,一经查实,本站将立刻删除。