我有以下代码:
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;
答案 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...
}
// ...
}