我有服务器 - 客户端应用程序,它是文件管理器
我的问题是,当我进入一个需要访问控制的文件夹,如系统文件夹,它变为只读,但我需要移动/删除或创建新文件夹,我怎么能获得这样做的权限?
这是我在服务器端创建新文件夹的方法
public void NewFolder(string path)
{
try
{
string name = @"\New Folder";
string current = name;
int i = 0;
while (Directory.Exists(path + current))
{
i++;
current = String.Format("{0} {1}", name, i);
}
Directory.CreateDirectory(path + current);
Explore(path); //this line is to refresh the items in the client side after creating the new folder
}
catch (Exception e)
{
sendInfo(e.Message, "error");
}
}
答案 0 :(得分:4)
如果要删除目录只读属性,请使用:http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/cb75ea00-f9c1-41e5-ac8e-296c302827a4
如果要访问系统文件夹,可以以本地管理员身份运行程序。
答案 1 :(得分:4)
驱动器上经常有目录,即使具有管理员权限的用户也无法访问。名为“HDDRecovery”的目录很可能像这样麻烦。当然,它包含敏感数据,可帮助用户从磁盘故障中恢复。适合此类别的另一个目录是“c:\ system volume information”,它包含还原点数据。
管理员可以更改此类文件夹的权限。但当然,这并不能解决实际问题,也不是明智之举。您的用户不能也不应该。一定要编写处理此类权限问题的代码,只需捕获IOExeption即可。从不显示设置了Hidden或System属性的目录,从而使用户免于麻烦。他们是“不要惹我”的属性。
答案 2 :(得分:3)
我也遇到了与此类似的问题,但我能够手动浏览Windows资源管理器并创建目录。
但是,我的笔记本电脑上的VS中运行的网络应用程序通过我的本地IIS托管,而不是VS的内置IIS交易,触发了拒绝访问的问题。
因此,当我在代码中遇到错误时,我深入研究了System.Environment对象中的更多数据并找到了用户,当然这是我的应用程序在IIS中运行的应用程序池。
因此,我打开了IIS并打开了相关应用程序池的高级设置,并将标识更改为在网络服务下运行。单击确定。 “cmd - > iisreset”是一个很好的衡量标准。再试一次应用程序,然后成功!!!!
答案 3 :(得分:1)
创建目录时遇到了同样的问题。我使用了DirectorySecurity,如下所示:
DirectorySecurity securityRules = new DirectorySecurity();
securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\AdminAccount1", FileSystemRights.Read, AccessControlType.Allow));
securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\YourAppAllowedGroup", FileSystemRights.FullControl, AccessControlType.Allow));
DirectoryInfo di = Directory.CreateDirectory(path + current, securityRules);
另请注意Hans Passant's answer所解释的安全性。
详情请见MSDN。
完整的代码:
public void NewFolder(string path)
{
try
{
string name = @"\New Folder";
string current = name;
int i = 0;
while (Directory.Exists(path + current))
{
i++;
current = String.Format("{0} {1}", name, i);
}
//Directory.CreateDirectory(path + current);
DirectorySecurity securityRules = new DirectorySecurity();
securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\AdminAccount1", FileSystemRights.Read, AccessControlType.Allow));
securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\YourAppAllowedGroup", FileSystemRights.FullControl, AccessControlType.Allow));
DirectoryInfo di = Directory.CreateDirectory(path + current, securityRules);
Explore(path); //this line is to refresh the items in the client side after creating the new folder
}
catch (Exception e)
{
sendInfo(e.Message, "error");
}
}
答案 4 :(得分:1)
我在此代码中遇到了类似的问题(asp.net MVC vs2017):
Directory.CreateDirectory(“〜/ temp”);
这是我的解决方法:
System.IO.Directory.CreateDirectory (System.Web.HttpContext.Current.Server.MapPath(“〜/ temp”));
答案 5 :(得分:0)
我怀疑当你在客户端/服务器模式下运行应用程序时,服务器部分需要以管理员身份运行,除了可能删除只读或系统标志之外,还需要能够做你想做的事。
那就是说,我同意@HansPassant-听起来你想做的事情是不明智的。
答案 6 :(得分:0)
<强>解决:强> 使用以下代码在远程服务器上创建的目录&amp;设置。
共享文件夹并在Advance中提供完全权限 在文件夹中设置。
DirectoryInfo di = Directory.CreateDirectory(@"\\191.168.01.01\Test\Test1");
测试是目标文件夹,在哪里创建新的Test1文件夹(目录)