确定文件是否是 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 存档内的目录 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • “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