问题标签 [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 回答
58226 浏览

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

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

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

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

0 投票
6 回答
8627 浏览

windows - 如何从磁盘获得良好的并发读取性能

我想问一个问题,然后用我自己的答案跟进,但也看看其他人有什么答案。

我们有两个大文件,我们想同时从两个单独的线程中读取它们。一个线程将顺序读取fileA,而另一个线程将顺序读取fileB。线程之间没有锁定或通信,它们都在尽可能快地顺序读取,并且都立即丢弃它们读取的数据。

我们在 Windows 上使用此设置的经验非常差。两个线程的总吞吐量约为 2-3 MiB/sec。驱动器似乎花费了大部分时间在两个文件之间来回搜索,可能在每次搜索后读取的很少。

如果我们禁用其中一个线程并暂时查看单个线程的性能,那么我们将获得更好的带宽(这台机器约为 45 MiB/秒)。很明显,糟糕的双线程性能是 OS 磁盘调度程序的产物。

我们可以做些什么来提高并发线程读取性能? 也许通过使用不同的 API 或以某种方式调整 OS 磁盘调度程序参数。

一些细节:

在具有 2GiB 内存的机器上,这些文件的大小约为 2GiB。出于这个问题的目的,我们认为它们没有被缓存和完美碎片整理。我们使用了碎片整理工具并重新启动以确保是这种情况。

我们没有使用特殊的 API 来读取这些文件。该行为可在各种标准 API 中重复,例如 Win32 的 CreateFile、C 的 fopen、C++ 的 std::ifstream、Java 的 FileInputStream 等。

每个线程都在循环中旋转,调用 read 函数。我们将每次迭代从 API 请求的字节数从 1KiB 到 128MiB 不等。改变这个没有任何效果,所以很明显,操作系统在每次磁盘寻道后物理读取的数量不是由这个数字决定的。这正是应该预期的。

在 Windows 2000、Windows XP(32 位和 64 位)、Windows Server 2003 以及使用和不使用硬件 RAID5 的情况下,单线程和双线程性能之间的巨大差异是可以重复的。

0 投票
9 回答
60297 浏览

perl - 如何在 Perl 中读取目录的内容?

如何让 Perl 将给定目录的内容读入数组?

反引号可以做到这一点,但有没有使用“scandir”或类似术语的方法?

0 投票
4 回答
2269 浏览

c# - 当文件变得可访问时是否可以引发事件?

在 C# 中,我可以使用 FileSystemWatcher 对象来监视特定文件并在创建、修改等时引发事件。

我对这个类的问题是它在文件创建时引发事件,即使创建文件的进程仍在写入过程中。我发现这是非常有问题的,特别是如果我试图读取诸如 XML 文档之类的文件,其中文件必须具有某种结构,在完成写入之前不存在。

.NET(最好是 2.0)是否有任何方法在文件变得可访问后引发事件,或者我是否必须不断尝试读取文件直到它不抛出异常才能知道它可用?

0 投票
5 回答
30753 浏览

c# - 在 C# Web 应用程序中从网络共享访问文件

我有一个需要从网络共享读取(并且可能写入)文件的 Web 应用程序。我想知道最好的方法是什么?

我无法让网络服务或 aspnet 帐户访问网络共享。我可能会使用模仿。

网络共享和 Web 应用程序都托管在同一个域上,我可以专门为此目的在域上创建一个新用户,但是我不太确定如何在创建文件流和指定要使用的凭据之间加入点在网络应用程序中。


不幸的是,该驱动器没有映射为机器上的网络驱动器,它只能作为网络共享提供给我,所以很遗憾我无法进行透明调用。

我可以想到一个关于模拟的问题......我认为每个应用程序域只能模拟一个用户,但我很高兴得到纠正。我可能需要将此文件写入多个不同的共享,这意味着我可能必须模拟多个用户。

我喜欢创建令牌的想法......如果我能做到,我将能够预先询问他们的凭据,然后动态应用安全性并在访问被拒绝时给他们有意义的错误消息......我我要去玩,但我会回来更新。

0 投票
10 回答
26639 浏览

c++ - 为什么 std::fstream 类不采用 std::string?

这不是一个设计问题,真的,虽然看起来很像。(嗯,好吧,这是一个设计问题)。我想知道的是为什么 C++std::fstream类不在std::string其构造函数或开放方法中采用 a。每个人都喜欢代码示例,所以:

这让我一直在处理文件。C++ 库肯定会std::string尽可能使用吗?

0 投票
3 回答
1788 浏览

python - 以编程方式编辑 Python 源代码

这是我认为非常有用的东西。基本上,我希望有一种无需人工干预即可以编程方式编辑 Python 源代码的方法。我想做几件事:

  1. 编辑使用源模块进行配置的 Python 应用程序的配置。

  2. 设置一个“模板”,以便我可以即时自定义 Python 源文件。这样,我可以在我正在开发的开源应用程序上设置一个“项目”系统,并允许自定义某些文件。

我可能自己写一些可以做到这一点的东西,但我可以看到这会引发很多“细节中的魔鬼”类型的问题。目前有什么方法可以做到这一点,还是我只能硬着头皮自己实施?

0 投票
7 回答
28609 浏览

java - 如何使用 Java 发现文件的创建时间?

有没有一种简单的方法可以用 Java 发现文件的创建时间?File 类只有一个获取“最后修改”时间的方法。根据我在 Google 上找到的一些资源,File 类不提供 getCreationTime() 方法,因为并非所有文件系统都支持创建时间的概念。

我发现的唯一可行的解​​决方案是对命令行进行脱壳并执行“dir”命令,这看起来像是输出文件的创建时间。我想这行得通,我只需要支持 Windows,但对我来说似乎很容易出错。

是否有任何第三方库可以提供我需要的信息?

更新:最后,我认为购买第三方库对我来说不值得,但他们的 API 看起来确实不错,所以对于其他有这个问题的人来说,这可能是一个不错的选择。

0 投票
9 回答
3680 浏览

.net - 使用 .NET 增强读取和解析文本文件的替代方案

我需要读取各种不同的文本文件(我有一些分隔文件和一些固定宽度的文件)。我考虑过逐行解析文件(使用 File.ReadLine 类型方法很慢)并使用 ODBC 文本驱动程序读取文件(更快),但有人有其他(更好的)建议吗?我正在使用 .NET/C#。

0 投票
5 回答
5105 浏览

asp.net - 多线程环境中的文件访问策略(Web App)

我有一个文件,它是一些数据的 XML 表示,这些数据取自 Web 服务并在 Web 应用程序中本地缓存。这个想法是这些数据是非常静态的,但可能会改变。因此,我将其设置为缓存到文件中,并在其上放置了一个监视器以检查它是否已被删除。删除后,文件将从其源刷新并重建。

不过,我现在遇到了问题,因为显然在多线程环境中,当它仍在读取/写入文件时尝试访问数据时,它会崩溃。

这让我很困惑,因为我添加了一个要锁定的对象,并且在读/写期间它总是被锁定。我的理解是,尝试从其他线程访问会被告知“等待”直到锁被释放?

只是让你知道,我是多线程开发的新手,所以我完全愿意接受这是我的一个错误:)

  • 我错过了什么吗?
  • 多线程环境中最好的文件访问策略是什么?

编辑

抱歉 - 我应该说这是使用ASP.NET 2.0 :)