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)); }
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); } }
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; }