我希望能够使用IFileProvider(PhysicalFileProvider)在asp.net core 2.0中获取所有驱动器。
是否需要额外使用某个工具?或者有人有相关示例吗?
祝好, Chris
我希望能够使用IFileProvider(PhysicalFileProvider)在asp.net core 2.0中获取所有驱动器。
是否需要额外使用某个工具?或者有人有相关示例吗?
祝好, Chris
您需要在REST API控制器和启动文件中使用命名空间Microsoft.Extensions.FileProviders;
才能使用实现IFileProvider
接口的PhysicalFileProvider
类。您可以使用GetDirectoryContents()
方法来迭代文件。
查看以下链接以获取从根目录获取文件的详细示例
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/file-providers
http://www.c-sharpcorner.com/article/file-providers-in-asp-net-core/
https://www.codeproject.com/Articles/1204104/ASP-NET-Core-File-Providers
IFileProvider
假定您从单个根目录开始,据我所知,.Net Core没有直接的方法将所有驱动器分组到单个根目录下。
PhysicalFileProvider
本身肯定也无法工作,原因相同。
因此,如果可能的话,我会简单地使用 System.IO.DriveInfo
来获取驱动器列表。如果需要可测试性,则可以将其包装在自定义类中并为其定义一个接口,例如:
interface IDriveInfo
{
string[] GetDrives();
}
IFileProvider
,您可以将 CompositeFileProvider
与 System.IO.DriveInfo
结合使用,如下所示,以实现您想要的功能:public IFileProvider GetFileProvider()
{
var drives = DriveInfo.GetDrives();
List<IFileProvider> fileProviders = new List<IFileProvider>();
foreach(var drive in drives)
{
if (drive.IsReady)
{
fileProviders.Add(new PhysicalFileProvider(drive.RootDirectory.ToString()));
}
}
return new CompositeFileProvider(fileProviders.ToArray());
}
GetDirectoryContents
的结果手动创建一个驱动器列表。HashSet<string> drives = new HashSet<string>();
var fp = GetFileProvider();
foreach (var fileInfo in fp.GetDirectoryContents(""))
{
var pos = fileInfo.PhysicalPath.IndexOf(':');
var driveLetter = fileInfo.PhysicalPath.Substring(0, pos+1);
drives.Add(driveLetter);
}