Пример #1
0
 public static void Write(string path, FileMode mode, Action <FileStream> writeAction)
 {
     try
     {
         var lockobj = new object();
         lock (lockDict)
         {
             if (!lockObjects.ContainsKey(path))
             {
                 lockObjects.Add(path, lockobj);
             }
             else
             {
                 lockobj = lockObjects[path];
             }
         }
         lock (lockobj)
         {
             var dir        = Path.GetDirectoryName(path);
             var identities = new string[] { "Everyone", "Users" };
             if (!Directory.Exists(dir))
             {
                 Directory.CreateDirectory(dir);
                 SecurityControl.AddSecurityControllToFolder(identities, dir);
             }
             else
             {
                 SecurityControl.AddSecurityControllToFolder(identities, dir);
             }
             using (FileStream fsWrite = new FileStream(path, mode, FileAccess.ReadWrite, FileShare.None))
             {
                 writeAction(fsWrite);
             }
         }
     }
     catch (System.Security.SecurityException)
     {
         throw new System.Security.SecurityException("权限未配置或异常,请检查相关文件及文件夹权限!");
     }
     catch (System.UnauthorizedAccessException)
     {
         throw new System.UnauthorizedAccessException("只读文件未能写入,请检查相关文件及文件夹读写权限!");
     }
 }
Пример #2
0
        public static T Read <T>(string path, FileMode mode, Func <FileStream, T> readAction)
        {
            try
            {
                var lockobj    = new object();
                var identities = new string[] { "Everyone", "Users" };

                lock (lockDict)
                {
                    if (!lockObjects.ContainsKey(path))
                    {
                        lockObjects.Add(path, lockobj);
                    }
                    else
                    {
                        lockobj = lockObjects[path];
                    }
                }
                lock (lockobj)
                {
                    SecurityControl.AddSecurityControllToFile(identities, path);
                    using (FileStream fsRead = new FileStream(path, mode))
                    {
                        return(readAction(fsRead));
                    }
                }
            }
            catch (System.Security.SecurityException)
            {
                throw new System.Security.SecurityException("权限未配置或异常,请检查相关文件及文件夹权限!");
            }
            catch (System.UnauthorizedAccessException)
            {
                throw new System.UnauthorizedAccessException("只读文件未能写入,请检查相关文件及文件夹读写权限!");
            }
        }