Exemple #1
0
        private DirectoryHandle Open(Directory dir, FileAccess access, FileShare share)
        {
            DokanDirectory dd;

            if (!_openDirectories.TryGetValue(dir.ID, out dd))
            {
                dd = new DokanDirectory(_fileSystem, dir);
                _openDirectories.Add(dir.ID, dd);
            }
            return(dd.Open(access, share));
        }
Exemple #2
0
        public static DirectoryHandle CreateNewDirectoryHandle(DokanDirectory directory, DokanNet.FileAccess access)
        {
            lock (_handles) {
                for (int i = 0; i < _handles.Count; i++)
                {
                    if (_handles[i] == null)
                    {
                        DirectoryHandle reusedHandle = new DirectoryHandle(i, directory, access);
                        _handles[i] = reusedHandle;
                        return(reusedHandle);
                    }
                }

                DirectoryHandle newHandle = new DirectoryHandle(_handles.Count, directory, access);
                _handles.Add(newHandle);
                return(newHandle);
            }
        }
Exemple #3
0
        public NtStatus FindFiles(string fileName, out IList <FileInformation> files, DokanFileInfo info)
        {
            try {
                DokanDirectory dir = ((DirectoryHandle)info.Context).Directory;
                var            f   = (from x in dir.Subdirectories.Values select(FileSystemObject) x).Union(
                    from x in dir.Files.Values select(FileSystemObject) x);
                files = f.Select(x => new FileInformation()
                {
                    FileName       = x.Name,
                    Length         = x is File file ? file.Length : 0,
                    LastWriteTime  = x.LastWriteTime,
                    LastAccessTime = x.LastAccessTime,
                    CreationTime   = x.CreationTime,
                    Attributes     = (x is Directory ? x.Attributes | FileAttributes.Directory : x.Attributes)
                }).ToList();

                (info.Context as IHandle).Messages.Add($"  FindFiles: {files.Count}");

                foreach (var x in files)
                {
                    (info.Context as IHandle).Messages.Add($"    {x.FileName} {x.Length} {x.Attributes} {x.CreationTime} {x.LastWriteTime} {x.LastAccessTime}");
                }
                return(DokanResult.Success);
            } catch (InvalidHandleException) {
 public DirectoryHandle(int id, DokanDirectory directory, DokanNet.FileAccess access)
 {
     ID        = id;
     Directory = directory;
     Access    = access;
 }