public FileLockManager()
 {
     this.fLocks = new List <FileLockItem>();
     this.BlockDeletePermissionList = new List <FileLockItem>();
     this.pDeleteOnClose            = false;
     this.plastAccess = new FileLastAccessControl();
 }
 /// <summary>
 /// Sets the information that the vItem was changed. If SetLastAccess=true, the information that the vItem was accessed is also set.
 /// </summary>
 /// <param name="vItem"></param>
 /// <param name="setLastAccess"></param>
 public static void SetLastWrite(IFuserFilesystemItem vItem, bool setLastAccess)
 {
     try {
         if (vItem == null)
         {
             return;
         }
         if (vItem.Filelock == null)
         {
             return;
         }
         FileLastAccessControl flac = vItem.Filelock.getLastAccessControl;
         if (flac == null)
         {
             return;
         }
         lock (flac) {
             flac.SetLastWrite();
             if (setLastAccess)
             {
                 flac.SetLastAccess();
             }
         }
     } catch {
         return;
     }
 }
        public FileHandler(string filename)
        {
            this.pFilename  = filename;
            this.curItem    = null;
            this.curDir     = null;
            this.UseOPLocks = true;// by default, OPLocks must be checked

            this.pIsOpenRead  = false;
            this.pIsOpenWrite = false;
            this.pData        = null;

            this.pLocks = new List <FileLockItem>();
            this.pLocks.Clear();

            this.pFileLastAccess = new FileLastAccessControl();
        }
        /// <summary>
        /// Writes the LastAccessed and LastModified information, if they have been changed, to the file. For files, the archive attribute is also set if necessary.
        /// </summary>
        /// <param name="vItem"></param>
        public static void WriteLastWriteAndAccess(IFuserFilesystemItem vItem)
        {
            try {
                bool     las   = false;
                bool     lws   = false;
                bool     IsDir = false;
                DateTime lat   = DateTime.MinValue;
                DateTime lwt   = DateTime.MinValue;

                if (vItem == null)
                {
                    return;
                }
                if (vItem.Filelock == null)
                {
                    return;
                }
                IsDir = (vItem is IFuserFilesystemDirectory);

                FileLastAccessControl flac = vItem.Filelock.getLastAccessControl;
                if (flac == null)
                {
                    return;
                }
                lock (flac) {
                    las = flac.IsLastAccessSet;
                    lws = flac.IsLastWriteSet;

                    if (las)
                    {
                        lat = flac.LastAccessTime;
                    }
                    if (lws)
                    {
                        lwt = flac.LastWriteTime;
                    }

                    if (las || lws)
                    {
                        flac.Rest(); // if there are any changes, reset them all.
                    }
                }

                if (!las && !lws)
                {
                    return; // nothing to do
                }
                lock (vItem) {
                    if (las)
                    {
                        vItem.LastAccessTime = lat;
                    }

                    if (lws)
                    {
                        vItem.LastWriteTime = lwt;
                        if (!IsDir)
                        {
                            vItem.isArchive = true;
                        }
                    }
                }
            } catch {
                return;
            }
        }