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 NtStatus GetFileInformation(string fileName, out FileInformation fileInfo, IDokanFileInfo info) { var isFile = IsNormalFile(fileName, info, out var file); if (file.Exists()) { var properties = file.BlobClient.GetProperties(); fileInfo = new FileInformation { Attributes = isFile ? FileAttributes.Normal : FileAttributes.Directory, Length = properties.Value.ContentLength, CreationTime = properties.Value.CreatedOn.LocalDateTime, FileName = BlobFile.GetFileName(fileName), LastAccessTime = properties.Value.LastModified.LocalDateTime, LastWriteTime = properties.Value.LastModified.LocalDateTime }; return(DokanResult.Success); } fileInfo = new FileInformation(); return(DokanResult.AccessDenied); }