asp.net – File.Exists从网络共享返回false
发布时间:2020-12-15 23:07:57 所属栏目:asp.Net 来源:网络整理
导读:我一直在研究一个将上传的文件保存到网络共享的ASP.NET项目.我想我可以使用虚拟目录并且没问题,但我一直在努力获得Directory.CreateDirectory的权限. 我能够上传文件,所以我决定更改我的代码,将所有内容放在一个目录中,但这需要我使用File.Exists来避免重写.
我一直在研究一个将上传的文件保存到网络共享的ASP.NET项目.我想我可以使用虚拟目录并且没问题,但我一直在努力获得Directory.CreateDirectory的权限.
我能够上传文件,所以我决定更改我的代码,将所有内容放在一个目录中,但这需要我使用File.Exists来避免重写. 现在我已经更新了所有代码,我发现无论我做什么,当我测试网络共享时,File.Exists总是返回false(文件肯定存在). 有任何想法吗?我正在通过网络共享走到尽头. 解决方法
我刚刚参与了一个非常类似的项目,我将文件保存到网络共享.这两台计算机位于同一子网上,但不受域控制器控制,因此每台计算机都拥有自己的用户.
我在两台计算机上创建了一个用户名和密码相同的用户.然后我创建了一个网络共享并设置文件夹/共享权限以允许用户进行读写. 然后我创建了以下类来管理模拟: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Security.Principal; using System.Security.Permissions; using System.Text; namespace MyProject.Business.Web { public class SecurityManager { #region DLL Imports [DllImport("advapi32.dll",SetLastError = true,CharSet = CharSet.Unicode)] public static extern bool LogonUser(String lpszUsername,String lpszDomain,String lpszPassword,int dwLogonType,int dwLogonProvider,ref IntPtr phToken); [DllImport("kernel32.dll",CharSet = CharSet.Auto)] public extern static bool CloseHandle(IntPtr handle); [DllImport("advapi32.dll",CharSet = CharSet.Auto,SetLastError = true)] public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,int SECURITY_IMPERSONATION_LEVEL,ref IntPtr DuplicateTokenHandle); #endregion public string Domain { get; set; } public string UserName { get; set; } public string Password { get; set; } private WindowsImpersonationContext m_CurrentImpersonationContext; [PermissionSetAttribute(SecurityAction.Demand,Name = "FullTrust")] public void StartImpersonation() { const int LOGON32_PROVIDER_DEFAULT = 0; const int LOGON32_LOGON_INTERACTIVE = 2; IntPtr tokenHandle = IntPtr.Zero; IntPtr dupeTokenHandle = IntPtr.Zero; // obtain a handle to an access token bool wasLogonSuccessful = LogonUser(UserName,Domain,Password,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,ref tokenHandle); if (!wasLogonSuccessful) throw new Exception(String.Format("Logon failed with error number {0}",Marshal.GetLastWin32Error())); // use the token handle to impersonate the user WindowsIdentity newId = new WindowsIdentity(tokenHandle); m_CurrentImpersonationContext = newId.Impersonate(); // free the tokens if (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } public void EndImpersonation() { m_CurrentImpersonationContext.Undo(); } } } 然后在ASP.NET页面中,我执行了以下操作: SecurityManager sm = new SecurityManager(); sm.UserName = ConfigurationManager.AppSettings["UserFileShareUsername"]; sm.Password = ConfigurationManager.AppSettings["UserFileSharePassword"]; sm.StartImpersonation(); if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); File.Move(sourcePath,destinationPath); sm.EndImpersonation(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 使用主题的css文件需要在页面上的头控件 (例如)
- asp.net – 程序或函数期望未提供的参数
- asp.net-mvc – RedirectToAction重定向查询参数?
- asp.net-mvc – Html.BeginForm()工作正常,Html.BeginForm(
- 将生产服务器从ASP.NET 2升级到ASP.NET 4
- 捕获从ASP.NET生成的HTML
- asp.net-mvc – HttpResponseException和HttpException之间
- asp.net – GetHashCode在这里只是货物崇拜吗?
- asp.net – Fiddler:错误502代理错误
- asp.net – 自定义验证属性不呈现客户端验证属性
推荐文章
站长推荐
- asp.net – 在不使用MVC的情况下在WebPages中渲染
- asp.net-mvc – ASP.NET MVC – 创建一个新模型或
- asp.net – BC30560:’default_aspx’在命名空间
- asp.net – Isapi过滤器无法在IIS 7上运行(在IIS
- asp.net – 在asp:GridView中插入隐藏列但仍然可
- asp.net-mvc – .Net MVC3资源文件和多租户
- IIS“SendResponse”状态下的请求已停留很长时间
- 将WebApiTestClient添加到ASP.NET Web API帮助页
- asp.net-mvc – 如何在ASP.NET MVC中将多个对象传
- asp.net – 如何添加一个访问控制允许原始头在II
热点阅读