确定文件是否是 zip 存档内的目录

2024-04-23

我根据规范读取 zip 文件,并从中央目录获取每个文件的信息。从标题中我读到:

#define VERSION_NEEDED_OFSSET 6

UINT16 versionNeeded = (UINT16)*(zipFile + VERSION_NEEDED_OFSSET);

所以我压缩了一些文件,还有一些目录,当我获得有关目录的信息时,我得到了versionNeeded = 0x000a

从我读到的文档中:

所需的最低受支持 ZIP 规范版本 提取文件,如上映射。该值基于 ZIP 程序必须支持的特定格式功能 能够提取文件。如果有多个特征 应用于文件时,最低版本必须设置为 具有最高价值的特征。新功能或特性 影响已发布格式规范的更改将是 使用比上一个更高的版本号实现 发布值以避免冲突。

4.4.3.2 当前最低功能版本定义如下:

1.0 - 默认值

1.1 - 文件是卷标

2.0 - 文件是文件夹(目录)

但是 zip 标头中用于确定文件类型的部分是什么?我看不到任何与文件类型有关的类型或位文档 https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT.


好的。如果有人发现这个,正确的方法是检查中央目录开始的偏移量加上38,一个名为外部文件属性

从文档中:

4.4.15 外部文件属性:(4 字节)外部属性的映射取决于主机系统(参见“版本由”)。为了 MS-DOS,低位字节是MS-DOS目录属性字节。如果 输入来自标准输入,该字段设置为零。

UINT32 external_attributes = (UINT32)*(zipFile + 38);

然后你将这个值与this https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx来自 MSDN 的常量。

要匹配目录,请比较external_attributes像这样:

if(external_attributes == 0x10) //FILE_ATTRIBUTE_DIRECTORY
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定文件是否是 zip 存档内的目录 的相关文章

  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • strtok() 使用安全吗[重复]

    这个问题在这里已经有答案了 我读到了很多负面的东西strtok 有人说它已经过时 有人说它不是线程安全的 等等 那么真相是什么 我可以使用吗strtok 它是线程安全的吗 Note 我正在使用 Visual C 您可以使用它 它是标准库的一
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • linq where 子句和 count 导致 null 异常

    除非 p School SchoolName 结果为 null 否则下面的代码将起作用 在这种情况下 它会导致 NullReferenceException if ExistingUsers Where p gt p StudentID i
  • 使用 dateTimePicker 在 DataGridView 中编辑日期

    我有一个DateTime我的 WinForms 中的专栏DataGridView 目前只能通过手动输入日期来编辑该字段 例如 2010 09 02 需要什么才能拥有一个DateTimePicker 或同等 用作编辑器 DataGridVie
  • 应在堆栈上分配的最大数量

    我一直在寻找堆栈溢出有关应在堆栈上分配的最大内存量的指南 我看到了堆栈与堆分配的最佳实践 但没有关于应该在堆栈上分配多少以及应该在堆上分配多少的指南 有什么想法 数字可以作为指导吗 什么时候应该在堆栈上分配 什么时候应该在堆上分配 多少才算
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 意外的 const 引用行为

    include
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • 'iter' 的名称查找已更改为新的 ISO 'for' 范围

    我正在尝试编译下面的两个文件 但从编译器收到错误消息 gcc 4 3 3 Linux 错误位于带有以下符号的行 LINE WITH ERROR 我做错了什么 我该怎么改变 路易斯 g c b h b cpp b cpp In functio
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4

随机推荐

  • “Alternative”中的模式匹配

    我有一个函数 它的参数进行模式匹配以生成计算StateT Maybe 可以这么说 此计算在运行时可能会失败 在这种情况下 我希望当前的模式匹配分支失败 我非常怀疑是否有可能有类似的东西 compute Int gt StateT Maybe
  • C# WebClient 使用异步并返回数据

    好吧 我在使用 DownloadDataAsync 并让它返回字节给我时遇到了问题 这是我正在使用的代码 private void button1 Click object sender EventArgs e byte bytes usi
  • HTTPS 上的 SWFUpload 无法正常工作

    当目标 servlet 侦听 HTTPS 时 我在使用 SWFUpload 上传文件时遇到问题 在 HTTP 上它工作得很好 仅当使用 FireFox 或 Opera 时才会出现此问题 在 IE 上它工作正常 没有尝试过其他浏览器 EDIT
  • 如何发出 JMS 同步请求

    我有一个 Web 应用程序 预计将从外部应用程序获取和显示数据 该外部应用程序只能通过消息传递 JMS 访问 因此 如果用户在浏览器上提交请求 则同一 HTTP 请求线程将必须与消息系统 MQ 系列 交互 以便同一请求线程可以显示从消息系统
  • 如何在 Silverlight/C# 中访问 ListBox 控件的 ScrollViewer 元素?

    我希望从 C 动态更改 Silverlight ListBox 的滚动位置 并且我需要知道如何从 C 访问 ListBox 控件的 ScrollViewer 元素 多谢你们 杰夫 在从 ListBox 类继承的类中 您可以使用 Protec
  • 区分大小写的文件系统上的 File.equals

    我有一个字符串形式的文件路径 在 Java 中 我需要确定文件系统上是否存在该文件 并且我们的代码需要跨平台 因为它在 Windows Linux 和 OS X 上运行 问题是文件路径和文件本身的大小写可能不匹配 即使它们确实代表相同的文件
  • 如何重叠两个控件

    我有一个圆和一个线控件 Circle 控件的 OnPaint 绘制一个圆 Line 控件的 OnPaint 绘制一条线 这两个控件包含在另一个控件 DrawingControl 中 我需要在圆上放置一条线 但圆的背景删除了该线 我尝试启用透
  • 如何在C#中将JSON数据保存到SQL Server数据库?

    我正在使用 synapse pay API 作为回报 我得到了一些响应 我想将该响应保存在 SQL 数据库中 我为此创建了课程 下面是获取响应的代码 var httpWebRequest HttpWebRequest WebRequest
  • 为什么我的 Android HttpClient 在调用 Execute 时不发送参数?

    我有一个AsyncTask设置创建一个AndroidHttpClient并打电话Execute 有一个HttpPost and BasicHttpContext我提供的对象 我设置了HttpPost像这样 HttpPost myPost n
  • 加载 aspnetcore RC2 默认网站项目时出现“Bad Gateway”错误

    我尝试通过 IIS 运行默认的 ASP NET Core Web 应用程序 VS 2015 中的 Web 应用程序模板 我已按照文档的说明进行操作here https docs asp net en latest publishing ii
  • 从 Android Studio 运行 Android 应用程序时如何启用协程调试模式?

    我在通过 Android Studio 以调试模式运行 Android 应用程序时遇到协程异常 kotlinx coroutines JobCancellationException StandaloneCoroutine 已取消 来自协程
  • 错误:“;”之前应有构造函数、析构函数或类型转换令牌?

    我正在尝试编译代码来测试读取和打印数据文件的函数 但出现我不明白的编译错误 错误 预期的构造函数 析构函数或 之前的类型转换 令牌 相关代码文本墙如下 struct Day int DayNum int TempMax int TempMi
  • 将此 c-cast 更改为reinterpret_cast 是否安全?

    我正在尝试从我正在处理的某些代码中删除 c 风格的强制转换 并且我对唯一的替代方案感到担忧 原来的代码是 WPARAM param WPARAM GetDlgItem IDC WORKFLOW m hWnd this gt PostMess
  • 如何使用 jQuery(schema.org 微格式)查找和读取元数据?

    我正在构建一个 Google 地图应用程序 我想读出元数据 如指定的那样schema org http schema org LocalBusiness 从我的 HTML 绘制我的地图标记 例如 li some html div class
  • 在真实的 Android 设备上运行 React Native 应用程序时无法与服务器连接

    我试图在我真正的 Android 设备上运行我的 React Native 应用程序 因为在使用 Android studio 时笔记本电脑变得太热 8 Gb RAM 痛苦 因此 我启用了 USB 调试 插入电缆并运行命令 react na
  • 远程nodejs服务器部署永远

    我正在尝试通过提交后钩子在远程计算机上部署节点js服务器 该钩子将调用远程计算机上执行实际部署的脚本 我面临的问题是 如果我在计算机上运行远程脚本 它可以正常工作 但是当我尝试通过 ssh 命令执行相同的脚本时 服务器无法启动 这就是我的提
  • 如何在对话框中托管预览处理程序

    我正在尝试在对话框中托管文件预览处理程序 我已经为资源管理器中的选择更改设置了一个事件接收器 当选择更改时 我将选定的 shell 项目提供给对话框 该对话框又将其提供给准备预览帧的函数 一般来说 它会成功加载正确的处理程序并显示文件的内容
  • vb.net dataTable/DataGridView 搜索/排序

    所以我在表单上有一个 dataGridView 和一个文本框 我希望能够搜索 dataGridView 并将其与文本框中的字符串进行比较 前任 我在文本框中输入 acv 所有包含 acv 的字符串都排序到顶部 我通过一系列涉及 datata
  • msgget() 和 mq_open 之间的区别

    我阅读了有关消息队列操作的信息 例如 msgget msgsnd 和 msgrcv 但是当我在堆栈溢出上搜索消息队列相关问题时 我发现还有另一组消息队列操作 例如 mq open mq send mq receive 谁能告诉我这两种类型的
  • 确定文件是否是 zip 存档内的目录

    我根据规范读取 zip 文件 并从中央目录获取每个文件的信息 从标题中我读到 define VERSION NEEDED OFSSET 6 UINT16 versionNeeded UINT16 zipFile VERSION NEEDED