- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了两个关于 zip 存档的问题,我想在这里分享并请求您的经验:
目录重复如果我在存档中创建两个或多个同名目录(在根目录下),存档包含两个目录(在查看条目时),但每个 ZIP 应用程序(也包括 Windows)只显示一个目录。我是这样做的:
using (ZipArchive a = ZipFile.Open("D:\\zip.zip", ZipArchiveMode.Update))
{
ZipArchiveEntry e1 = a.CreateEntry("dir1/");
ZipArchiveEntry e2 = a.CreateEntry("dir1/");
foreach (var afile in a.Entries)
{
Console.WriteLine(afile.FullName);
}
}
级别本身并不重要,如果我向下一个级别(“dir1/dir2/”)也会发生同样的情况。
缺少条目我错误地将斜杠作为目录或文件名的第一个字符。这两个条目在 Entries 属性中也可见,但在 ZIP 应用程序(也包括 Windows)中也不可见:
using (ZipArchive a = ZipFile.Open("D:\\zip.zip", ZipArchiveMode.Update))
{
ZipArchiveEntry e1 = a.CreateEntry("/dir1");
ZipArchiveEntry e2 = a.CreateEntry("/dir1.txt");
foreach (var afile in a.Entries)
{
Console.WriteLine(afile.FullName);
}
}
你们有没有遇到过这个问题?是只有ZIP能做到,而没有应用程序能显示的问题,还是创建例程没有正确处理的错误?
谢谢马丁
最佳答案
这两种行为都是完全正常的。它们源于您对 .zip 存档的工作方式以及 ZipArchive
特别是如何运作的误解。
首先,正如我在回答您的其他 ZipArchive
问题时提到的那样,.zip 存档中实际上并没有任何“目录”本身。它们仅通过在名称中使用目录名称创建的条目而存在。
因此,如果您添加名为 dir1/dir2/test1.txt
的条目,您将获得名为 dir1
和 dir2
的“目录”。如果您删除该条目,这些目录就会消失。
所以当您认为您正在创建目录时,您实际上只是在创建新条目。正如文档所说,您可以创建多个具有相同名称的条目。当然,在这种情况下会发生什么取决于您用来打开存档的工具。许多(如您所见)只会显示第一项。
解决方案是不要尝试创建目录。那是行不通的。只需用您想要的目录路径编写条目。这些目录是根据在这些目录中命名的实际项目隐式“创建”的。
就前导 /
字符而言,根据规范,.zip 存档中的所有文件路径都应该是“相对的”,即它们不应包含前导 /
字符。 The MSDN documentation甚至特别指出:
The entryName string should reflect the relative path of the entry you want to create within the zip archive. There is no restriction on the string you provide. However, if it is not formatted as a relative path, the entry is created, but you may get an exception when you extract the contents of the zip archive.
在您的情况下,似乎没有发生异常,但是当在其他工具中打开存档时,您根本无权访问存档条目。解决方案是“不要那样做”。
关于c# - 压缩包 : Entry name problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562061/
我很绝望,现在已经两天(!!)天都没有解决方案来解决以下问题。 更新 Lion 后,我想使用最新版本的 rvm 安装额外的 rubies。 这是我之后调用 bundler 时发生的情况: /Users
我的问题: ajax 调用的无限循环会产生问题吗? 假设有这样的代码: ajaxcall(); function ajaxcall(){ jQuery.ajax({ typ
这是一个有趣的小项目,我已经开始尝试并最大限度地提高赢得办公室曲棍球池的机会。我试图找到最好的方法来选择 20 名能够在最高工资帽内给我最多分数的球员。 例如,假设原始数据由 玩家姓名 位置(前锋,后
我有一个总数为540000的数字列表。我想将此列表分为3个列表,每个列表总共180000。最有效的编程方法是这样做,假设数字列表是一个平面文件,每个数字为线? 最佳答案 听起来像Knapsack pr
抱歉,也许因为我不是英语,我不知道,但我找不到解决几个问题的任何资源;也许我用的词不正确.. 我想了解有关 iPhone 4 和 5 不同分辨率的更多信息。 首先:如果我开发针对 iPhone 4 分
在全局配置缓存后,如 docs ,如果我在 app.module 之外使用 CacheInterceptor,它会抛出错误。 app.module.ts const cacheConfig = {
我无法让 g:each 工作。我正在尝试遍历任何内容,但它永远不起作用 = 不生成任何 html。 索引.gsp Item ${i.name} 用户 Controller .g
在我的 XAML 文件中,我有一个这样声明的 ListBox:
想知道你是否可以帮助我: 我有一个名为initializeAll的方法: public final void initializeAll() { //other stuff........ rand
我尝试过使用 XML 和 JAVA 在我的 Android Activity 中创建一个 ImageView。这两次,我都能够获取我一天前创建的所有其他 PNG 资源以显示在 ImageView 中。
我需要你的帮助。这是什么意思? Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'
这是一段代码 function test() { this.value = "foo"; } $(document).ready(function () { test();
这是一些非常基础的东西。渲染期间引发异常:java.util.Locale.toLanguageTag()Ljava/lang/String; XML: 问题似乎出在 Edit
除其他来源外,我还使用 Stackoverflow 上的各种帖子,尝试实现我自己的 PHP 分类器,以将推文分类为正面、中性和负面类别。在编码之前,我需要弄清楚流程。我的思路和例子如下:
在过去的几周里,每当我在 Eclipse 上使用 SVN 插件时,我都会收到以下错误: Certificate Problem There is a problem with the site's s
我被拒绝运行以下功能(位于 /var/www/mysite/public_html/app/Controllers/Script.php) $structure = '/var/www/mysite/
我正在使用 ctags 为我的 Emacs 创建标签以使用 cygwin 从中读取符号。 Emacs 说 “访问标签表缓冲区:文件/home/superman/tags 不是有效的标签表” 这是我查找
我知道作为一种函数式语言,XSL 没有像传统的 for 循环(而是 for-each)那样的东西。 我正在尝试从可变数量的元素开始创建一个具有固定数量 (7) 的表。总之,我有
我正在使用RavenDB进行一些测试,以基于iphone应用程序存储数据。该应用程序将发送一个带有GPS key 的5个GPS坐标的字符串。我在RavenDB中看到每个文档约为664-668字节。这是
我无法理解我的应用程序的行为。我想创建一个简单的窗口 (1000x700px),分为两部分(分别为 250px 和 750px 宽度)。我尝试了以下代码: import java.awt.Color;
我是一名优秀的程序员,十分优秀!