コード例 #1
0
        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));
        }
コード例 #2
0
        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));
            }
        }