问题标签 [file-io]

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 回答
2497 浏览

c++ - XP 上的文件:关闭“最后访问时间”是否安全?

我正在拼命寻找便宜的方法来降低我家用 PC 的构建时间。我刚刚阅读了一篇关于在 Windows XP 上禁用文件的 Last Access Time 属性的文章,这样简单的读取就不会将任何内容写回磁盘。

这也很简单。在 DOS 提示符下写入:

fsutil behavior set disablelastaccess 1

有没有人在构建 C++ 项目的环境中尝试过它?有什么缺点吗?

[编辑] 更多关于这里的主题。

0 投票
3 回答
1662 浏览

design-patterns - 用于保存和写入不同文件格式的模式

在保存和加载不同的文件格式时,是否有一种很好用的模式?

例如,我有一个复杂的文档类层次结构,但我想支持几种不同的文件格式。

我考虑了策略模式,但我不相信,因为需要访问对象的每个部分才能保存和加载它。

0 投票
6 回答
36987 浏览

c# - 执行文件io时如何正确处理异常

我经常发现自己以某种方式与文件进行交互,但是在编写代码之后,我总是不确定它实际上是多么生硬。问题是我不完全确定与文件相关的操作是如何失败的,因此,这是处理期望的最佳方法。

简单的解决方案似乎只是捕获代码抛出的任何 IOExceptions 并向用户提供“无法访问的文件”错误消息,但是否有可能获得更细粒度的错误消息。有没有办法确定文件被另一个程序锁定等错误与由于硬件错误导致数据不可读之间的区别?

鉴于以下 C# 代码,您将如何以用户友好(尽可能提供信息)的方式处理错误?

0 投票
4 回答
2467 浏览

.net - .Net 中的异步文件 IO

我正在用 C# 构建一个玩具数据库,以了解有关编译器、优化器和索引技术的更多信息。

我想在将页面带入缓冲池的(至少读取)请求之间保持最大并行度,但我对如何在 .NET 中最好地实现这一点感到困惑。

以下是一些选项以及我遇到的问题:

  1. 用途System.IO.FileStreamBeginRead方法

    但是,文件中的位置不是 的参数BeginRead,它是FileStream(通过Seek方法设置)的属性,所以我一次只能发出一个请求,并且必须在持续时间内锁定流。(或者我是吗?文档不清楚如果我只在SeekandBeginRead调用之间持有锁但在调用之前释放它会发生什么EndRead。有人知道吗?)我知道该怎么做,我只是不确定它是最好的办法。

  2. 似乎还有另一种方式,以System.Threading.Overlapped结构和 P\Invoke 为 中心ReadFileEx在 kernel32.dll 中的函数。

    不幸的是,缺乏样本,尤其是在托管语言中。这条路线(如果它可以工作的话)显然还涉及ThreadPool.BindHandle线程池中的方法和IO完成线程。我的印象是这是在 Windows 下处理这种情况的认可方式,但我不明白,我找不到对初学者有帮助的文档的入口点。

  3. 还有什么?

  4. 在评论中,雅各布建议FileStream为飞行中的每一次阅读创建一个新的。

  5. 将整个文件读入内存。

    如果数据库很小,这将起作用。代码库很小,还有很多其他的低效率,但数据库本身不是。我还想确保我正在做处理大型数据库所需的所有簿记(事实证明这是复杂性的很大一部分:分页、外部排序......)我担心它可能也是容易不小心作弊。

编辑

澄清为什么我对解决方案 1 持怀疑态度:从 BeginRead 到 EndRead 一直持有一个锁意味着我需要阻止任何想要启动读取的人,因为另一次读取正在进行中。这感觉不对,因为启动新读取的线程可能(通常)能够在结果可用之前做更多的工作。(实际上,仅仅写这篇文章就让我想到了一个新的解决方案,我把它作为一个新的答案。)

0 投票
2 回答
15700 浏览

c# - 如何在没有 CopyFile 或 CopyFileEx 的情况下在 Windows 上复制大文件?

Windows Server 2003 有一个限制,它会阻止您复制非常大的文件,这与您拥有的 RAM 量成正比。限制在于 xcopy、Explorer、Robocopy 和 .NET FileInfo 类使用的 CopyFile 和 CopyFileEx 函数。

这是您得到的错误:

无法复制 [文件名]:系统资源不足,无法完成请求的服务。

这是一篇关于该主题的知识库文章,但它与 NT4 和 2000 相关。

还有一个建议是从 Exchange 安装中使用 ESEUTIL,但我没有任何运气让它工作。

有没有人知道一个快速,简单的方法来处理这个?我说的是在具有 2Gb RAM 的机器上 >50Gb。我计划启动 Visual Studio 并为我编写一些东西来完成它,但如果有一些已经存在、稳定且经过良好测试的东西会很好。

[编辑]我提供了工作 C# 代码来配合接受的答案。

0 投票
6 回答
14066 浏览

java - 使用 FileChannel 和 ByteArrays 读取 ASCII 文件

我有以下代码:

但是字符会显示在?这与使用 Unicode 字符的 Java 有关吗?我该如何纠正?

0 投票
6 回答
16961 浏览

ruby - Java .properties 文件等效于 Ruby?

我需要将一些简单的属性存储在一个文件中并从 Ruby 中访问它们。

我非常喜欢 .properties 文件格式,它是 Java 中此类事物的标准(使用 java.util.Properties 类)......它简单、易于使用且易于阅读。

那么,是否有一个 Ruby 类可以让我轻松地从这样的文件中加载一些键值对?

我不想使用 XML,所以请不要建议 REXML(我的目的不保证“尖括号税”)。

我已经考虑推出我自己的解决方案......它可能是大约 5-10 行代码顶部,但我仍然宁愿使用现有的库(如果它本质上是从文件构建的哈希)......因为那会把它降低到 1 行....


更新:它实际上是一个直接的 Ruby 应用程序,而不是 rails,但我认为 YAML 会做得很好(它在我的脑海中,但我忘记了它......见过但从未使用过),谢谢大家!

0 投票
3 回答
6166 浏览

c# - 在 C# 中预分配文件空间?

我正在创建一个下载应用程序,我希望在文件实际下载之前在硬盘驱动器上为文件分配空间,因为它们可能相当大,并且没有人喜欢看到“此驱动器已满,请删除一些文件并重试。 " 所以,鉴于此,我写了这篇文章。

它可以工作,至少在您下载数百 MB 甚至可能是 GB 的文件之前,如果没有完全清除页面文件并完全杀死您的系统内存,那么您将 Windows 投入到一个颠簸的狂热中。哎呀。

所以,有了更多的启发,我开始使用以下算法。

这很有效,甚至没有遇到最后一个解决方案的严重内存问题。不过它仍然很慢,尤其是在较旧的硬件上,因为它将(可能是 GB 的)数据写入磁盘。

问题是:有没有更好的方法来完成同样的事情?有没有办法告诉 Windows 创建一个 x 大小的文件并简单地分配文件系统上的空间,而不是实际写出大量数据。我根本不关心初始化文件中的数据(我使用的协议 - bittorrent - 为其发送的文件提供哈希,因此随机未初始化数据的最坏情况是我得到一个幸运的巧合和文件的一部分是正确的)。

0 投票
4 回答
6647 浏览

.net - DirectoryInfo.GetDirectories() 和属性

我正在使用DirectoryInfo.GetDirectories()递归查找给定路径下的所有子目录。但是,我想排除系统文件夹,并且没有明确的方法。在 FindFirstFile/FindNextFile 中,属性更清晰。

0 投票
4 回答
202 浏览

c# - 让多个程序集访问同一个文本文件

我在同一个 c#/.net 解决方案中有许多程序集/项目。使用 Web 应用程序 gui 的人需要保存设置,然后控制台应用程序和一些测试项目需要访问同一个文件。我应该把文件放在哪里以及如何访问它?

我尝试过使用“AppDomain.CurrentDomain.BaseDirectory”,但最终对于我的程序集有所不同。“System.Reflection.Assembly.Get*Assembly.Location”也无法满足我的需求。

也许这不是我应该在文件中而是在数据库中的东西?但是对于几行配置来说,这样做感觉太复杂了。