读书人

C#怎么创建文件夹并指定Everyone完全访

发布时间: 2012-06-14 16:00:31 作者: rapoo

C#如何创建文件夹并指定Everyone完全访问权限
最近遇到一个棘手的问题

用C#创建文件夹

C# code
public bool WriteOperationLog(string category, string msg)        {            try            {                string dir = string.Empty;                string path = string.Empty;                if (string.IsNullOrEmpty(m_log_path) || string.IsNullOrEmpty(m_log_file_name))                {                    error_msg = "No log file name or log file path.";                    return false;                }                if (Path.IsPathRooted(m_log_path))                {                    dir = m_log_path;                }                else                {                    dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, m_log_path);                }                Directory.CreateDirectory(dir);   //创建文件夹                path = Path.Combine(dir, m_log_file_name + ".txt");                FileStream f;                f = new FileStream(dir, FileMode.Append);                StreamWriter r = new StreamWriter(f);                r.WriteLine(string.Format("{0}t{1}t{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), category, msg));                r.Flush();                r.Close();                BackupLog();                DeleteLog();                return true;            }            catch (Exception ex)            {                error_msg = ex.ToString();                return false;            }        }


调用这个函数会报 “对路径“H:\Charley\MyApp\XJFIR\XJFIRClient\bin\Debug\log”的访问被拒绝”。

注:这个函数和调用程序不在同一个程序集。

然后,我想可能是没有权限创建目录,于是我想创建文件夹时加入Everyone的完全访问权限,从网上搜了一段代码,修改这个函数如下:
C# code
public bool WriteOperationLog(string category, string msg)        {            try            {                string dir = string.Empty;                string path = string.Empty;                if (string.IsNullOrEmpty(m_log_path) || string.IsNullOrEmpty(m_log_file_name))                {                    error_msg = "No log file name or log file path.";                    return false;                }                if (Path.IsPathRooted(m_log_path))                {                    dir = m_log_path;                }                else                {                    dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, m_log_path);                }                Directory.CreateDirectory(dir);                DirectoryInfo dir_info = new DirectoryInfo(dir);                DirectorySecurity dir_security = new DirectorySecurity();                dir_security.AddAccessRule(new FileSystemAccessRule("Everyone ", FileSystemRights.WriteData, AccessControlType.Allow));                dir_info.SetAccessControl(dir_security);                path = Path.Combine(dir, m_log_file_name + ".txt");                FileStream f;                f = new FileStream(dir, FileMode.Append);                StreamWriter r = new StreamWriter(f);                r.WriteLine(string.Format("{0}t{1}t{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), category, msg));                r.Flush();                r.Close();                BackupLog();                DeleteLog();                return true;            }            catch (Exception ex)            {                error_msg = ex.ToString();                return false;            }        }


可是运行又出现问题了:执行到 dir_security.AddAccessRule(new FileSystemAccessRule("Everyone ", FileSystemRights.WriteData, AccessControlType.Allow));
报:“此工作站和主域间的信任关系失败”。

实在没辙了,不曾想用C#创建一个目录还这么难,请高手指教,不胜感谢!!!



[解决办法]
指定用户名的时候,应该是用"计算机或域名\用户名"


[解决办法]
参考http://hi.baidu.com/tyq_man/blog/item/92d934b450eaddc636d3ca89.html

C# code
/*  需要添加以下命名空间:  using System.IO;  using System.Security.AccessControl;  */    string sPath = Server.MapPath(文件夹名称字符串);   Directory.CreateDirectory(sPath);   addpathPower(sPath, "ASPNET", "FullControl");     //////////////////////////////////////////////////     public void addpathPower(string pathname, string username, string power)   {         DirectoryInfo dirinfo = new DirectoryInfo(pathname);         if ((dirinfo.Attributes & FileAttributes.ReadOnly) != 0)       {           dirinfo.Attributes = FileAttributes.Normal;       }         //取得访问控制列表       DirectorySecurity dirsecurity = dirinfo.GetAccessControl();         switch (power)       {           case "FullControl":               dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));               break;           case "ReadOnly":              dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow));               break;           case "Write":               dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow));               break;           case "Modify":               dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow));               break;       }       dirinfo.SetAccessControl(dirsecurity);   }
[解决办法]
探讨

引用:

指定用户名的时候,应该是用"计算机或域名\用户名"


那我发布程序后,不再这个域中运行,怎么办呢

读书人网 >C#

热点推荐