Exemple #1
0
 public int FindFiles(string filename, ArrayList files, DokanFileInfo info)
 {
     lock (_syncObj)
     {
         FileHandle           handle    = (FileHandle)info.Context;
         VirtualBaseDirectory directory = handle == null ? null : handle.Resource as VirtualBaseDirectory;
         if (directory == null)
         {
             return(-DokanNet.ERROR_PATH_NOT_FOUND);
         }
         foreach (KeyValuePair <string, VirtualFileSystemResource> entry in directory.ChildResources)
         {
             VirtualFileSystemResource   resource         = entry.Value;
             IFileSystemResourceAccessor resourceAccessor = resource.ResourceAccessor;
             bool            isFile = resource is VirtualFile;
             FileInformation fi     = new FileInformation
             {
                 Attributes     = isFile ? FILE_ATTRIBUTES : DIRECTORY_ATTRIBUTES,
                 CreationTime   = resource.CreationTime,
                 LastAccessTime = CorrectTimeValue(resourceAccessor == null ? resource.CreationTime : resourceAccessor.LastChanged),
                 LastWriteTime  = CorrectTimeValue(directory.CreationTime),
                 Length         = resourceAccessor == null || !isFile ? 0 : resourceAccessor.Size,
                 FileName       = entry.Key
             };
             files.Add(fi);
         }
         return(DokanNet.DOKAN_SUCCESS);
     }
 }
Exemple #2
0
 public int GetFileInformation(string filename, FileInformation fileinfo, DokanFileInfo info)
 {
     lock (_syncObj)
     {
         FileHandle handle = (FileHandle)info.Context;
         if (handle == null)
         {
             return(-DokanNet.ERROR_FILE_NOT_FOUND);
         }
         VirtualFileSystemResource resource = handle.Resource;
         VirtualFile file = resource as VirtualFile;
         IFileSystemResourceAccessor resourceAccessor = resource.ResourceAccessor;
         VirtualBaseDirectory        directory        = resource as VirtualBaseDirectory;
         fileinfo.FileName       = filename;
         fileinfo.CreationTime   = resource.CreationTime;
         fileinfo.LastAccessTime = CorrectTimeValue(resourceAccessor == null ? resource.CreationTime : resourceAccessor.LastChanged);
         fileinfo.LastWriteTime  = CorrectTimeValue(resource.CreationTime);
         if (file != null)
         {
             fileinfo.Attributes = FILE_ATTRIBUTES;
             fileinfo.Length     = resourceAccessor == null ? 0 : resourceAccessor.Size;
             return(DokanNet.DOKAN_SUCCESS);
         }
         if (directory != null)
         {
             fileinfo.Attributes = DIRECTORY_ATTRIBUTES;
             fileinfo.Length     = 0;
             return(DokanNet.DOKAN_SUCCESS);
         }
         return(-DokanNet.ERROR_FILE_NOT_FOUND);
     }
 }
Exemple #3
0
        public NtStatus FindFiles(string filename, out IList <FileInformation> files, DokanFileInfo info)
        {
            files = new List <FileInformation>();
            lock (_syncObj)
            {
                FileHandle           handle    = info.Context as FileHandle;
                VirtualBaseDirectory directory = handle == null ? null : handle.Resource as VirtualBaseDirectory;
                if (directory == null)
                {
                    files = null;
                    return(DokanResult.FileNotFound);
                }

                foreach (KeyValuePair <string, VirtualFileSystemResource> entry in directory.ChildResources)
                {
                    VirtualFileSystemResource   resource         = entry.Value;
                    IFileSystemResourceAccessor resourceAccessor = resource.ResourceAccessor;
                    bool            isFile = resource is VirtualFile;
                    FileInformation fi     = new FileInformation
                    {
                        Attributes     = isFile ? FILE_ATTRIBUTES : DIRECTORY_ATTRIBUTES,
                        CreationTime   = resource.CreationTime,
                        LastAccessTime = CorrectTimeValue(resourceAccessor == null ? resource.CreationTime : resourceAccessor.LastChanged),
                        LastWriteTime  = CorrectTimeValue(directory.CreationTime),
                        Length         = resourceAccessor == null || !isFile ? 0 : resourceAccessor.Size,
                        FileName       = entry.Key
                    };
                    files.Add(fi);
                }
                return(DokanResult.Success);
            }
        }
Exemple #4
0
        public NtStatus GetFileInformation(string filename, out FileInformation fileinfo, DokanFileInfo info)
        {
            lock (_syncObj)
            {
                fileinfo = new FileInformation();
                FileHandle handle = info.Context as FileHandle;
                if (handle == null)
                {
                    return(DokanResult.FileNotFound);
                }

                VirtualFileSystemResource resource = handle.Resource;
                VirtualFile file = resource as VirtualFile;
                IFileSystemResourceAccessor resourceAccessor = resource.ResourceAccessor;
                VirtualBaseDirectory        directory        = resource as VirtualBaseDirectory;
                fileinfo.FileName       = filename;
                fileinfo.CreationTime   = resource.CreationTime;
                fileinfo.LastAccessTime = CorrectTimeValue(resourceAccessor == null ? resource.CreationTime : resourceAccessor.LastChanged);
                fileinfo.LastWriteTime  = CorrectTimeValue(resource.CreationTime);
                if (file != null)
                {
                    fileinfo.Attributes = FILE_ATTRIBUTES;
                    fileinfo.Length     = resourceAccessor == null ? 0 : resourceAccessor.Size;
                    return(DokanResult.Success);
                }
                if (directory != null)
                {
                    fileinfo.Attributes = DIRECTORY_ATTRIBUTES;
                    fileinfo.Length     = 0;
                    return(DokanResult.Success);
                }
                return(DokanResult.FileNotFound);
            }
        }
Exemple #5
0
        protected VirtualFileSystemResource ParseFileName(string fileName)
        {
            if (fileName == "\\")
            {
                return(_root);
            }
            if (!fileName.StartsWith("\\"))
            {
                return(null);
            }
            string[] pathSegments = fileName.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
            VirtualFileSystemResource resource = _root;

            lock (_syncObj)
                foreach (string pathSegment in pathSegments)
                {
                    VirtualBaseDirectory directory = resource as VirtualBaseDirectory;
                    if (directory == null || !directory.ChildResources.TryGetValue(pathSegment, out resource))
                    {
                        return(null);
                    }
                }
            return(resource);
        }