首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新FileInfo中的FileInfo

新FileInfo中的FileInfo
EN

Stack Overflow用户
提问于 2017-08-08 07:28:11
回答 1查看 883关注 0票数 0

我有以下代码:

代码语言:javascript
复制
    static long getFolderSize(string path)
    {
        string[] a = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);

        long b = 0;
        foreach (string name in a)
        {
            FileInfo fi = new FileInfo(name);
            b += fi.Length;
        }

        return b;
    }

在运行此代码的环境中,有超过260个字符限制的路径。因此,行

代码语言:javascript
复制
FileInfo fi = new FileInfor(name);

抛出一个System.IO.PathTooLongException。

我已经阅读了很多关于这个问题的文章,根据https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/的说法,这个问题应该在.NET 4.6.2中解决。因此,我在.NET 4.7中编译了代码,但仍然是一样的。

正如在线程中提到的,我尝试使用德利蒙的库,但是它在行中抛出了一个System.OverflowException。

代码语言:javascript
复制
string[] a = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);

有人知道如何解决这个问题吗?(我不可能改变文件结构,使用映射驱动器也是不可能的)。

谢谢

编辑:

我加了

代码语言:javascript
复制
<runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/>
</runtime>

到app.config (注意,它是一个控制台应用程序)。现在在行中抛出一个System.IO.FileNotFoundException

代码语言:javascript
复制
b += fi.Length;

Edit2:

app.config文件如下所示:

代码语言:javascript
复制
<?xml version="1.0"?>
<configuration>
    <runtime>
        <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/>
        <runtime targetFramework="4.7"/>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
        </runtime>
        <appSettings>
            <add key="SQLServer" value="Server2"/>
            <add key="database" value="FolderSizeMonitor"/>
            <add key="server" value="Server3"/>
        </appSettings>
        <startup>
            <dir ID="1" path="\\server20\d$\Data\BEG\Emergency\Emergency Management\Very Very Very Long pathVery Very Very Long path" DepthToLook="4">
            </dir>
    </startup>
</configuration>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-13 04:39:47

下面的代码实现了这个窍门:

代码语言:javascript
复制
    static long getFolderSize(string path)
    {
        DirectoryInfo dirInfo = new DirectoryInfo(path);

        long b = 0;
        foreach(FileInfo fi in dirInfo.EnumerateFiles("*",SearchOption.AllDirectories))
        {
            b += fi.Length;
        }

        return b;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45561890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档