如何使用IFileInfo删除ASP.NET Core中的文件

时间:2018-10-03 11:27:26

标签: c# asp.net-core .net-core

我已经读到,最好使用IFileProvider在ASP.NET Core Microsoft Documentation中管理文件。但是,如果我使用GetFileInfo()方法,我将可以访问IFileInfo,它只提供了一些读取文件的方法!

如何删除文件?

1 个答案:

答案 0 :(得分:3)

您已在注释中建议您关注的是代码可能在其上运行的不同操作系统中 paths 的不同形式。只要您不尝试将路径的string.Concat+位在一起,就可以在StringBuilder中构建它们,或者以其他任何方式假装您将能够构建有效的路径在任何情况下都适合自己:)。 System.IO命名空间中与文件系统相关的类专门用于帮助您实现此目的,因此请使用它们。

如果您已经有其他地方的IFileProvider实例(例如,这就是您正在使用的方法,请枚举要向用户显示 的文件,以便他们可以选择要删除),则可以将其与System.IO进行混搭,也许是这样的:

public void SomeMethodThatsCalled()
{
    // I'm presuming there's a lot of other code here, and that the IFileProvider
    // is actually dependency injected somewhere, somehow, but it's self-contained
    // here for completeness
    IFileProvider physicalFileProvider = new PhysicalFileProvider(@"D:\DeleteMyContentsPlease\");

    DeleteFiles(physicalFileProvider);
}

private void DeleteFiles(IFileProvider physicalFileProvider)
{
    if (physicalFileProvider is PhysicalFileProvider)
    {
        var directory = physicalFileProvider.GetDirectoryContents(string.Empty);
        foreach (var file in directory)
        {
            if (!file.IsDirectory)
            {
                var fileInfo = new System.IO.FileInfo(file.PhysicalPath);
                fileInfo.Delete();

            }
        }
    }
}

绝对没有错误检查,验证,异常处理或任何其他可以远程使此生产代码出现在此处的东西可能例外是实际上检查了目录中的条目不是目录!),所以请不要按原样使用它。

同样::如果您从任何地方都没有IFileSystem的实例,就不必特别创建一个删除文件的实例!