新FileInfo中的PathTooLongException

时间:2017-08-08 07:28:12

标签: c# .net file path

我有以下代码:

70%

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

    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;
    }

抛出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中编译了代码,但仍然是相同的。

正如在this线程中所提到的,我试图使用Delimon的库但它在行中抛出了System.OverflowException

FileInfo fi = new FileInfor(name);

有没有人知道如何解决这个问题? (我无法更改文件结构,也无法使用映射驱动器。)

由于

修改

我添加了

string[] a = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);

到app.config(请注意它是一个控制台应用程序)。现在,行

中抛出了System.IO.FileNotFoundException
<runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/>
</runtime>

EDIT2:

这是app.config文件的样子:

b += fi.Length;

1 个答案:

答案 0 :(得分:0)

以下代码可以解决问题:

struct records {
    short link; 
    double gate; 
    unsigned char bar;
    int rest; 
    char rink; 
};

int main(int argc, char* argv[]){
    struct records rec;

    // ...

    FILE *fp=fopen(argv[1], "rb");

    // ...

    //use fread() for each field in struct separately.   

    while (!feof(fp))
    {
        if (fread(&rec.link, sizeof(rec.link), 1, fp) != 1
           || fread(&rec.gate, sizeof(rec.gate), 1, fp) != 1
           || // etc...
           )
        {
            // error !
        }
        // print the contents of rec, for example...
    }
    // ...
}