public IFileInfo GetFileInfo(string subpath) { bool isRetry = false; L_RETRY: subpath = NormalizeSubPath(subpath, NormalizePathOption.NormalizeCaseFileName); bool exists = false; bool isDirectroy = default; long length = default; string? physicalPath = null; string? name = null; DateTimeOffset lastModified = default; if (FileSystem.IsFileExists(subpath)) { exists = true; FileMetadata meta = FileSystem.GetFileMetadata(subpath, FileMetadataGetFlags.NoAlternateStream | FileMetadataGetFlags.NoAttributes | FileMetadataGetFlags.NoPhysicalFileSize | FileMetadataGetFlags.NoAuthor | FileMetadataGetFlags.NoSecurity); length = meta.Size; lastModified = meta.LastWriteTime ?? default; } else if (FileSystem.IsDirectoryExists(subpath)) { exists = true; isDirectroy = true; FileMetadata meta = FileSystem.GetDirectoryMetadata(subpath, FileMetadataGetFlags.NoAlternateStream | FileMetadataGetFlags.NoAttributes | FileMetadataGetFlags.NoPhysicalFileSize | FileMetadataGetFlags.NoAuthor | FileMetadataGetFlags.NoSecurity); lastModified = meta.LastWriteTime ?? default; } else { if (isRetry == false) { isRetry = true; FileSystem.FlushNormalizedCaseCorrectionCache(); goto L_RETRY; } } if (exists) { physicalPath = FileSystem.MapPathVirtualToPhysical(subpath); name = Parser.GetFileName(subpath); } return(new FsBasedFileProviderFileInfoImpl(EnsureInternal.Yes, this, subpath, exists, isDirectroy, length, physicalPath, name, lastModified)); }
public IDirectoryContents GetDirectoryContents(string subpath) { bool isRetry = false; L_RETRY: subpath = NormalizeSubPath(subpath, NormalizePathOption.NormalizeCaseDirectory); if (FileSystem.IsDirectoryExists(subpath) == false) { if (isRetry == false) { isRetry = true; FileSystem.FlushNormalizedCaseCorrectionCache(); goto L_RETRY; } else { return(new FsBasedFileProviderDirectoryContentsImpl()); } } else { string physicalDirPath = FileSystem.MapPathVirtualToPhysical(subpath); FileSystemEntity[] enums = FileSystem.EnumDirectory(subpath, flags: EnumDirectoryFlags.NoGetPhysicalSize); List <FsBasedFileProviderFileInfoImpl> o = new List <FsBasedFileProviderFileInfoImpl>(); foreach (FileSystemEntity e in enums) { if (e.IsCurrentOrParentDirectory == false) { FsBasedFileProviderFileInfoImpl d = new FsBasedFileProviderFileInfoImpl(EnsureInternal.Yes, this, e.FullPath, true, e.IsDirectory, e.Size, FileSystem.UnderlayFileSystem.PathParser.Combine(physicalDirPath, e.Name), e.Name, e.LastWriteTime); o.Add(d); } } return(new FsBasedFileProviderDirectoryContentsImpl(o)); } }