【问题标题】:C# - FileStream / Stream - PathTooLongException - Zeta Long PathsC# - FileStream / Stream - PathTooLongException - Zeta 长路径
【发布时间】:2017-08-28 12:55:17
【问题描述】:

我正在创建一个将解析压缩文件的 Windows 窗体应用程序。我遇到了一个例外

System.IO.PathTooLongException 在调试文件时 被解析和提取的完全限定名称超过 259 人物。这里的一篇文章提到了 Zeta Long Paths。

我已经通过 Nuget 包下载它并在我的项目中使用它。

ZlpIOHelper 可用于执行文件处理功能。

我通过对象资源管理器浏览了参考资料,但无法确定如何使用 Zeta 长路径创建 FileSteam。

FileStream fs = File.OpenRead(archiveFilenameIn);

Stream inStream = File.OpenRead(gzArchiveName);
Stream gzipStream = new GZipInputStream(inStream);

如何使用 Zeta Long Paths 实现上述功能?还是其他包?

不是重复的问题。 .NET 版本是 4.0 和特定的长路径包。

【问题讨论】:

  • @demo 不是重复的。该帖子中提到的解决方案不适用于此处,因为 .NET 版本是 4.0。另外,问题是如何使用 Zeta Long Paths 实现 Stream。
  • 如果在.NET 4.6.2上编译,可以去掉路径太长的限制。看这里:stackoverflow.com/a/38889598/711061
  • @sam 在 .NET 4.6.2 上尝试过,并且提到的方法依赖于 Windows 10。不幸的是,仅限于 .NET 4.0。
  • @Tango 不确定是否仍然与您相关,但请参阅我提出的答案

标签: c# .net


【解决方案1】:

通过 Zeta Long Path 创建 FileStream 不是自动的,但可以。

您必须首先为您的文件获取/创建一个SafeFileHandle。我还没有在 read 场景中进行测试,但这里有一个示例,说明如何在深度嵌套的路径上将一些 Stream 数据写入到您自己的 FileStream:

using (var fileHandle = ZlpIOHelper.CreateFileHandle(very_long_outputPath, ZetaLongPaths.Native.CreationDisposition.CreateAlways, ZetaLongPaths.Native.FileAccess.GenericAll, ZetaLongPaths.Native.FileShare.Read))
{
    using (FileStream streamWriter = new System.IO.FileStream(fileHandle, System.IO.FileAccess.Write))
    {
       //Your code logic here
    }
}

【讨论】:

    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2010-11-13
    • 2021-12-05
    • 2021-02-22
    相关资源
    最近更新 更多