问题标签 [file]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
5098 浏览

压缩/解压缩文件夹和文件

有谁知道在 C# 中快速压缩或解压缩文件和文件夹的好方法?可能需要处理大文件。

0 投票
22 回答
98032 浏览

什么是比 Windows 默认更好的文件复制替代方案?

我需要在我的计算机上复制数百个随机文件,并且对使用 Windows 内置的普通文件副本非常谨慎。

我不希望它挂在“你确定吗?”、“你真的确定吗?”、“即使是 zip 文件?”、“当然也不是只读文件!” 我一走开就循环。

我不希望它工作几个小时然后意外停止:“有人曾经打开过这个文件,所以我不会复制它!” 然后取消整个副本,或者直接退出,不知道做了什么,还有什么工作。

您使用过哪些文件管理程序?你推荐哪个?

这个问题与我的另一个问题有关:如何在我较新的仅支持 SATA 的计算机上使用旧的 PATA 硬盘驱动器?

0 投票
11 回答
68591 浏览

将 CSV 文件导入 .Net 中的强类型数据结构

将 CSV 文件导入强类型数据结构的最佳方法是什么?

0 投票
1 回答
1054 浏览

二进制文件布局参考

关于二进制文件布局结构的一些好的信息来源在哪里?

如果我想提取BTrieve索引文件、解析MP3标题等。从哪里获得可靠的信息?

0 投票
9 回答
58226 浏览

如何使用 Java 读取正在写入的文件?

我有一个将信息写入文件的应用程序。此信息在执行后用于确定应用程序的通过/失败/正确性。我希望能够在文件被写入时读取它,以便我可以实时进行这些通过/失败/正确性检查。

我认为可以做到这一点,但是在使用 Java 时涉及到什么问题?如果读取赶上写入,它会等待更多写入直到文件关闭,还是读取会在此时抛出异常?如果是后者,那我该怎么办?

我的直觉目前正在推动我走向 BufferedStreams。这是要走的路吗?

0 投票
6 回答
10926 浏览

C# 中的二进制补丁生成

是否有人拥有或知道 C# 中的二进制补丁生成算法实现?

基本上,比较两个文件(指定为oldnew),并生成一个补丁文件,该补丁文件可用于升级旧文件以与文件具有相同的内容。

实施必须相对较快,并且可以处理大量文件。它应该展示 O(n) 或 O(logn) 运行时。

我自己的算法要么很糟糕(快速但产生巨大的补丁),要么很慢(产生小补丁但运行时间为 O(n^2))。

任何建议或实施指针都会很好。

具体来说,该实现将用于为我们拥有一台主服务器的各种大型数据文件保持服务器同步。当主服务器数据文件发生变化时,我们也需要更新几个异地服务器。

我做过的最天真的算法,它只适用于可以保存在内存中的文件,如下所示:

  1. 文件中获取前四个字节,称之为密钥
  2. 将这些字节添加到字典中,其中key -> position,其中position是我抓取这 4 个字节的位置,以 0 开头
  3. 跳过这四个字节中的第一个,抓取另外 4 个(3 个重叠,1 个),并以相同的方式添加到字典中
  4. 对旧文件中的所有 4 字节块重复步骤 1-3
  5. 从新文件的开头,抓取 4 个字节,并尝试在字典中查找它
  6. 如果找到,则通过比较两个文件中的字节数,找到最长的匹配项(如果有多个)
  7. 在旧文件中编码对该位置的引用,并跳过文件中的匹配块
  8. 如果未找到,则从新文件中编码 1 个字节,然后跳过它
  9. 对新文件的其余部分重复步骤 5-8

这有点像压缩,没有开窗,所以会占用大量内存。但是,只要我尝试使代码输出最小化,它就相当快,并且会产生很小的补丁。

一种更节省内存的算法使用窗口,但会产生更大的补丁文件。

我在这篇文章中跳过了上述算法的更多细微差别,但如有必要,我可以发布更多细节。然而,我确实觉得我需要一个完全不同的算法,所以对上述算法的改进可能不会让我走得足够远。


编辑#1:这是对上述算法的更详细描述。

首先,合并这两个文件,这样你就有了一个大文件。记住两个文件之间的切入点。

其次,抓取 4 个字节并将它们的位置添加到整个文件中所有内容的字典步骤中。

第三,从新文件开始的地方开始循环,尝试定位现有的 4 个字节组合,并找到最长的匹配项。确保我们只考虑旧文件中的位置,或者新文件中比我们当前所在位置更早的位置。这确保了我们可以在补丁应用期间重用旧文件和新文件中的材料。


编辑#2上述算法的源代码

您可能会收到有关证书存在问题的警告。我不知道如何解决这个问题,所以暂时只接受证书。

源代码使用了我库的其余部分中的许多其他类型,因此该文件并不是它所需要的全部,但这就是算法实现。


@lomaxx,我试图为 subversion 中使用的算法找到一个很好的文档,称为 xdelta,但除非您已经知道该算法是如何工作的,否则我找到的文档无法告诉我我需要知道什么。

或者也许我只是很密集...... :)

我从您提供的那个站点快速浏览了算法,不幸的是它不可用。来自二进制差异文件的评论说:

找到一组最佳差异需要相对于输入大小的二次时间,因此它很快就会变得不可用。

我的需求不是最佳的,所以我正在寻找更实用的解决方案。

不过,感谢您的回答,如果我需要的话,可以在他的实用程序中添加一个书签。

编辑#1:注意,我会查看他的代码,看看我是否能找到一些想法,稍后我还会向他发送一封电子邮件,提出问题,但我已经阅读了他引用的那本书,尽管解决方案对找到最佳解决方案,由于时间要求,它在使用中是不切实际的。

编辑#2:我肯定会寻找 python xdelta 实现。

0 投票
7 回答
164588 浏览

我应该如何将文件加载到我的 Java 应用程序中?

我应该如何将文件加载到我的 Java 应用程序中?

0 投票
9 回答
154996 浏览

如何在 C++ 中打开文件?

我想以 C++ 方式打开一个文件进行阅读。我需要能够做到:

  • 文本文件,这将涉及某种读取行功能。

  • 二进制文件,这将提供一种将原始数据读入char*缓冲区的方法。

0 投票
14 回答
141895 浏览

你如何确定C中文件的大小?

如何计算文件的大小(以字节为单位)?

0 投票
9 回答
135515 浏览

如何在 C 中获得目录列表?

如何在 C 中扫描目录中的文件夹和文件?它需要是跨平台的。