public NtStatus FindFilesWithPattern([NotNull] string fileName, string searchPattern, out IList <FileInformation> files, [NotNull] IDokanFileInfo info) { bool Predicate(FileSystemInfo finfo) { return(finfo != null && DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)); } IEnumerable <FileSystemInfo> mineQuery = new DirectoryInfo(GetMinePath(fileName)).EnumerateFileSystemInfos().Where(Predicate); IEnumerable <FileSystemInfo> baseQuery = new DirectoryInfo(GetBasePath(fileName)).EnumerateFileSystemInfos().Where(Predicate); files = mineQuery // grab all form mine & merge with all from base that arent in mine .Union(baseQuery, _FileSystemInfoComparer) .Select(o => { Debug.Assert(o != null, nameof(o) + " != null"); return(new FileInformation { Attributes = o.Attributes, CreationTime = o.CreationTime, LastAccessTime = o.LastAccessTime, LastWriteTime = o.LastWriteTime, Length = (o as FileInfo)?.Length ?? 0, FileName = o.Name }); }) .ToArray(); return(DokanResult.Success); }
public IList <FileInformation> FindFilesHelper(string fileName, string searchPattern) { IList <FileInformation> files = new List <FileInformation>(); IList <FileInformation> tmp; foreach (FS fs in fsl) { if (Directory.Exists(combine(fs.TLD, fileName)) || File.Exists(combine(fs.TLD, fileName))) { tmp = new DirectoryInfo(combine(fs.TLD, fileName)) .EnumerateFileSystemInfos() .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInformation { Attributes = finfo.Attributes, CreationTime = finfo.CreationTime, LastAccessTime = finfo.LastAccessTime, LastWriteTime = finfo.LastWriteTime, Length = (finfo as FileInfo)?.Length ?? 0, FileName = finfo.Name }).ToArray(); files = files.Union(tmp, new FileCompInfo()).ToArray(); } } return(files); }
public FileInfo[] FindFilesHelper(string fileName, string searchPattern) { var files = new DirectoryInfo(TranslatePath(fileName)) .EnumerateFileSystemInfos() .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInfo(finfo.FullName)) .ToArray(); return(files); }
public IList <FileInformation> FindFilesHelper(string fileName, IDokanFileInfo info, string searchPattern) { return(FindFileNode(fileName, info) .mChildren .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.mNodeEntry.Name, true)) .Select(finfo => new FileInformation { Attributes = finfo.IsDirectory() ? FileAttributes.Directory : FileAttributes.ReadOnly, CreationTime = DefaultCreationTime, LastAccessTime = DefaultLastAccessTime, LastWriteTime = finfo.mNodeEntry.LastWriteTime.DateTime, Length = finfo.mNodeEntry.Length, FileName = finfo.mNodeEntry.Name }).ToArray()); }
public NtStatus FindFilesWithPattern([NotNull] string fileName, [NotNull] string searchPattern, out IList <FileInformation> files, [NotNull] IDokanFileInfo info) { files = new DirectoryInfo(GetMinePath(fileName)) .EnumerateFileSystemInfos() .Where(finfo => finfo != null && DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInformation { Attributes = finfo.Attributes, CreationTime = finfo.CreationTime, LastAccessTime = finfo.LastAccessTime, LastWriteTime = finfo.LastWriteTime, Length = (finfo as FileInfo)?.Length ?? 0, FileName = finfo.Name }).ToArray(); return(DokanResult.Success); }
public IList <FileInformation> FindFilesHelper(string fileName, string searchPattern) { IList <FileInformation> files = new DirectoryInfo(GetPath(fileName)) .EnumerateFileSystemInfos() .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInformation { Attributes = finfo.Attributes, CreationTime = finfo.CreationTime, LastAccessTime = finfo.LastAccessTime, LastWriteTime = finfo.LastWriteTime, Length = (finfo as FileInfo)?.Length ?? 0, FileName = finfo.Name }).ToArray(); return(files); }
private IList <FileInformation> _RealEnumerateChildren(string filePath, string searchPattern) { filePath = filePath?.Replace("\\", "/"); var items = RootFs.EnumerateChildrenAsync(filePath).AsTask().Result; IList <FileInformation> files = items .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInformation { Attributes = FileAttributes.Normal | (finfo.IsDirectory ? FileAttributes.Directory : 0) | (finfo.IsHidden ? FileAttributes.Hidden : 0),// | (finfo.IsReadOnly ? FileAttributes.ReadOnly : 0), CreationTime = finfo.CreationDate, LastAccessTime = null, LastWriteTime = null, Length = finfo.Size ?? 0, FileName = finfo.Name }).ToArray(); //Logger.LogTrace($"_RealEnumerateChildren {filePath} received {items.Count} item(s), return {files.Count} file(s)"); return(files); }
private IList <FileInformation> _RealEnumerateChildren(string filePath, string searchPattern) { filePath = filePath?.Replace("\\", "/"); var items = _PersonalCloud.RootFS.EnumerateChildrenAsync(filePath).ConfigureAwait(false).GetAwaiter().GetResult(); IList <FileInformation> files = items .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInformation { Attributes = FileAttributes.Normal | (finfo.IsDirectory ? FileAttributes.Directory : 0) | (finfo.IsHidden ? FileAttributes.Hidden : 0),// | (finfo.IsReadOnly ? FileAttributes.ReadOnly : 0), CreationTime = finfo.CreationDate, LastAccessTime = null, LastWriteTime = null, Length = finfo.Size ?? 0, FileName = finfo.Name }).ToArray(); Console.WriteLine($"_RealEnumerateChildren received {items.Count} item(s), return {files.Count} file(s)"); return(files); }
public NtStatus FindFilesWithPattern(string fileName, string searchPattern, out IList <FileInformation> files, IDokanFileInfo info) { if (!IsNormalFile(fileName, info, out var cachedDir)) { files = _containerClient .GetBlobsByHierarchy( prefix: cachedDir.BlobClient.Name.Replace(BlobFile.DirectoryFileName, string.Empty)) .Where(f => !f.Blob.Name.EndsWith( $"{BlobFile.DefaultDirectorySeparator}{BlobFile.DirectoryFileName}") && DokanHelper.DokanIsNameInExpression(searchPattern, fileName, true)) .Select(f => { var fi = new FileInformation(); fi.FileName = BlobFile.GetFileName(f.Blob.Name); fi.Attributes = f.Blob.Name.EndsWith(BlobFile.DefaultDirectorySeparator) ? FileAttributes.Directory : FileAttributes.Normal; if (f.Blob.Properties.ContentLength.HasValue) { fi.Length = f.Blob.Properties.ContentLength.Value; } if (f.Blob.Properties.CreatedOn.HasValue) { fi.CreationTime = f.Blob.Properties.CreatedOn.Value.LocalDateTime; } if (f.Blob.Properties.LastModified != null) { fi.LastAccessTime = f.Blob.Properties.LastModified.Value.LocalDateTime; fi.LastWriteTime = f.Blob.Properties.LastModified.Value.LocalDateTime; } return(fi); }) .ToList(); return(DokanResult.Success); } files = new List <FileInformation>(); return(DokanResult.FileNotFound); }
public IList <FileInformation> FindFilesHelper(string fileName, string searchPattern) { IList <FileInformation> files = new List <FileInformation>(); // Hashset to check if a file is just added HashSet <string> filesAdded = new HashSet <string>(); // First add logical files int fileSlashCount = 1; if (fileName != @"\") { fileSlashCount = countCharInsideString(fileName, '\\') + 1; } // Scan Logical entries foreach (string logicalPath in dirConf.Keys) { // Ignore root logical path if (logicalPath == @"\") { continue; } // Check backslash and root folder int slashCount = countCharInsideString(logicalPath, '\\'); if (slashCount != fileSlashCount || !logicalPath.StartsWith(fileName)) { continue; } // Translate the path string dirName = GetFolderName(logicalPath); // If file just added before ignore and go on if (filesAdded.Contains(dirName)) { continue; } // If not match the searchPattern ignore and go on if (!DokanHelper.DokanIsNameInExpression(searchPattern, dirName, true)) { continue; } // Add a directory var finfo = new FileInformation { FileName = dirName, Attributes = FileAttributes.Directory, LastAccessTime = DateTime.Now, LastWriteTime = null, CreationTime = null }; files.Add(finfo); filesAdded.Add(finfo.FileName); } // Get real dirs from logical paths string[] realDirs = GetPaths(fileName); // Scan real dirs foreach (string realDir in realDirs) { // If the directory not exist skip it if (!Directory.Exists(realDir)) { continue; } // Get file list from real dir IEnumerable <FileInformation> fEnum = new DirectoryInfo(realDir) .EnumerateFileSystemInfos() .Where(finfo => DokanHelper.DokanIsNameInExpression(searchPattern, finfo.Name, true)) .Select(finfo => new FileInformation { Attributes = finfo.Attributes, CreationTime = finfo.CreationTime, LastAccessTime = finfo.LastAccessTime, LastWriteTime = finfo.LastWriteTime, Length = (finfo as FileInfo)?.Length ?? 0, FileName = finfo.Name }); // Merge to existing list and discard doubles files = files.Union(fEnum).GroupBy(o => o.FileName).Select(g => g.First()).ToList(); } // Return the complete file list return(files); }