Tag: fileshare

通过文件共享,用户身份validation通过网络复制文件

我正在构建.net C#控制台程序,以将文件部署到Windows文件共享服务器(正在共享的文件夹)。 路径是:: \\192.168.0.76\htdocs\public 在运行时我收到错误: [09:35:29]: [Step 1/3] Unhandled Exception: System.UnauthorizedAccessException: Access to the path ‘\\192.168.0.76\htdocs\public’ is denied. [09:35:29]: [Step 1/3] at DeployFileShare.Program.CopyDir(String source, String dest, String[] exclude, Boolean overwrite) [09:35:29]: [Step 1/3] at DeployFileShare.Program.Deploy(String num, String source) [09:35:29]: [Step 1/3] at DeployFileShare.Program.Main(String[] args) [09:35:29]: [Step 1/3] Process exited with code -532459699 我想我需要对自己进行身份validation。 我遇到过这个: AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); […]

在C#/ .NET中访问MAX_PATH之外的文件

背景 我需要编写一个使用.NET 2.0版本的工具(由于政治,商业和机密性/信任原因,使用现成的东西不是这个客户的选项)通过网络将文件从一个服务器迁移到另一个服务器。 服务器是本地团队的文件服务器,需要将某些团队文件夹迁移到其他服务器以便于重组。 基本的想法是我们读取每个文件并在数小时内通过网络流式传输,几天后数据将被迁移。 需要保留文件权限。 由于这需要几天时间(我们正在谈论几千兆字节的数据,对于某些团队而言),我们需要每晚迭代文件并比较修改日期并更新已更改的日期。 理论上,最终新服务器将拥有最新的文件副本,用户可以切换到新服务器。 它当然不是那么简单,但我们有一个我们认为应该工作的设计:) 问题 所以从理论上讲,我们只需打开文件,通过网络流式传输,然后在另一端写入,对吧? 🙂 不幸的是,在服务器本身,文件共享是在文件夹路径创建的,例如: D:\ Data \ Team Shares \ DIVISION \ DEPARTMENT \ NAME OF TEAM – 可能会长篇大论 对于每个用户,此路径映射到驱动器,例如,它将作为\\ SERVER \ TEAMNAME共享并映射到T:驱动器。 这导致了从T:驱动器可见的文件在MAX_PATH限制范围内的情况,但是当在服务器本身上本地查看时,它们会超出它。 我们无法使用网络共享来访问文件,因为这个工具需要是通用的,要在数百个这样的服务器上运行,并且没有标准的方法来判断哪些文件共享是我们应该移动的文件共享,哪些不是 – 有甚至没有命名约定标准。 此外,偶尔会有其他股份的子股,因此我们超过MAX_PATH限制两倍! 我知道使用“\\?\”前缀指定路径的解决方法,该路径将路径视为UNC路径,并允许理论上最多32k个字符。 这种解决方法是在Win32 API级别实现的,System.IO命名空间(大部分)基本上只是本机Win32 API函数的一个薄包装,但是在将调用交给API之前,Microsoft已经“帮助”实现了额外(不正确)的validation。 。 在这种情况下,.NET Framework拒绝该路径,因为它声称’?’ 是一个无效的路径字符。 所以我的问题是……有没有一种方法我没有想到这将允许我解决这个问题,而不必完全重写几乎整个System.IO命名空间,加载P / Invoke调用,只是为了删除这个烦人的validation?

C#文件读/写fileshare似乎不起作用

我的问题是基于inheritance了我不能做很多的遗留代码。 基本上,我有一个可以生成数据块的设备。 一个将调用设备来创建该数据块的库,由于某些原因我不完全理解并且即使我想要也不能改变,将该数据块写入磁盘。 此写入不是即时的,但最多可能需要90秒。 在那个时候,用户想要获得正在生成的数据的局部视图,所以我想要一个消费者线程来读取另一个库写入磁盘的数据。 在我触摸这个遗留代码之前,我想使用我完全控制的代码来模仿问题。 我正在使用C#,表面上是因为它提供了我想要的许多function。 在生成器类中,我有这个代码创建一个随机数据块: FileStream theFS = new FileStream(this.ScannerRawFileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read); //note that I need to be able to read this elsewhere… BinaryWriter theBinaryWriter = new BinaryWriter(theFS); int y, x; for (y = 0; y < imheight; y++){ ushort[] theData= new ushort[imwidth]; for(x = 0; x = 0 ? y-1 […]