问题标签 [fseek]

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 投票
6 回答
3182 浏览

c++ - 确定大于 4GB 的文件的大小

代码当前执行此操作,并且 fgetpos 确实处理大于 4GB 的文件,但搜索返回错误,所以知道如何搜索到 a 的末尾file > 4GB吗?

0 投票
5 回答
2530 浏览

c - fseek / 循环倒带

我有一个代码中的情况,其中有一个巨大的函数可以逐行解析记录,验证并写入另一个文件。

如果文件中有错误,它会调用另一个拒绝记录并写入拒绝原因的函数。

由于程序中的内存泄漏,它与 SIGSEGV 一起崩溃。从崩溃的地方“重新启动”文件的一种解决方案是将最后处理的记录写入一个简单文件。

为此,需要将处理循环中的当前记录号写入文件。如何确保数据在循环内的文件上被覆盖?

使用 fseek 在循环中首先定位/倒带会降低性能吗?

记录的数量可能很多,有时(高达 500K)。

谢谢。

编辑:内存泄漏已经修复。重新启动解决方案被建议作为一种额外的安全措施和手段,以提供重新启动机制以及 SKIP n 记录解决方案。很抱歉没有早点提及。

0 投票
5 回答
11934 浏览

c - 使用 fseek 回溯

使用fseek回溯字符fscanf操作可靠吗?

例如,如果我刚刚fscanf-ed 10 个字符,但我想回溯 10 个字符,我可以fseek(infile, -10, SEEK_CUR)吗?

在大多数情况下,它都有效,但我似乎对角色有问题^M。显然fseek将其注册为 char 但fscanf不注册它,因此在我之前的示例中^M,需要一个包含 a 的 10 char 块fseek(infile, -11, SEEK_CUR)fseek(infile, -10, SEEK_CUR)会使它缩短 1 个字符。

为什么会这样?

编辑:我fopen在文本模式下使用

0 投票
3 回答
1292 浏览

php - PHP fseek() 等效于变量?

我需要的是 PHPfseek()功能的等价物。该函数适用于文件,但我有一个包含二进制数据的变量,我想处理它。我知道我可以使用substr(),但这会很糟糕 - 它用于字符串,而不是二进制数据。此外,创建文件然后使用fseek()也不是我想要的。

也许是用流构建的东西?

编辑:好的,我快到了:

警告:无法打开流:rfc2397:非法参数

0 投票
8 回答
2220 浏览

c - C malloc/free + fgets 性能

当我遍历文件 A 中的行时,我正在解析该行并将每个字符串 ( char*) 放入char**.

在一行的末尾,我运行一个过程,该过程包括打开文件 B,使用fgets,fseekfgetc从该文件中获取字符。然后我关闭文件 B。

我为每一行重复重新打开和重新关闭文件 B。

我想知道的是:

  1. malloc使用and是否会对性能产生重大影响free,因此我应该使用静态的东西myArray[NUM_STRINGS][MAX_STRING_WIDTH]而不是动态的东西char** myArray

  2. 打开和关闭文件 B 是否有显着的性能开销(从概念上讲,数千次)?如果我的文件 A 已排序,有没有办法让我fseek在文件 B 中“向后”移动,以重置我之前在文件 B 中的位置?

编辑结果证明,一种双重方法大大减少了运行时间:

  1. 我的文件 B 实际上是二十四个文件之一。而不是打开同一个文件 B1 一千次,然后打开 B2 一千次,等等。我打开文件 B1 一次,关闭它,B2 一次,关闭它等等。这将数千次fopen操作减少fclose到大约 24 次。

  2. 我曾经rewind()重置文件指针。

这产生了大约 60 倍的速度提升,这已经绰绰有余了。谢谢你指点我rewind()

0 投票
3 回答
1787 浏览

linux - 关于找文件位置的问题

我之前的问题是关于原始数据读写的,但是出现了一个新的问题,似乎没有结局......

问题是:函数的参数像lseek()orfseek()都是 4 个字节。如果我想将跨度移动到 4G 之上,那是不可能的。我知道在 Win32 中有一个函数SetPointer(...,Hign, Low,....),这个指针可以生成 64 字节的指针,这就是我想要的。

但是如果我想在 Linux 或 Unix 中创建一个应用程序(创建一个文件或直接写入原始驱动器扇区),我该如何移动到 4G 上的指针?

谢谢,等待您的回复...

0 投票
3 回答
4349 浏览

c - 为什么在更新模式的读写之间总是需要 fseek 或 fflush?

fopen问:我正在尝试通过使用mode 、读取某个字符串并写回修改后的字符串来就地更新文件"r+",但它不起作用。

A:一定要fseek在你写之前调用,既要回到你试图覆盖的字符串的开头,又因为在读/写“+”模式下读和写之间总是需要一个fseek 或。fflush

我的问题是为什么 fseekfflush总是需要在读/写“+”模式下读写之间?Andrew Koenig 的 C Traps and Pitfalls (1989) 第 5.2 节提到这是因为向后兼容问题。谁能详细解释一下?

0 投票
2 回答
26135 浏览

c - C 编程 ftell fseek fread,读取文件的大小

我有一个文件。我读了文件的大小。然后我一次循环读取两个字节,直到到达文件末尾。每次读取操作后,我将当前位置增加 2,但是在我达到文件大小的一半后位置不会增加,fread 操作将读取 0 个字节。

程序读取文件大小。我执行 fread (每次 2 个字节),直到当前位置等于文件的大小。它读取文件大小的 22915 个字节它在每次读取后将位置增加 2,但是当当前位置达到 11459 时,它是文件大小的一半,它将读取零字节,从而进入无限循环。

0 投票
3 回答
2236 浏览

c++ - _fread_nolock、_fseek_nolock 的预期用途是什么?

我们有一个 C++ 类,它基本上从二进制文件中读取和写入向量。将单个向量加载到内存中的示例读取函数如下所示:

Out 程序使用 OpenMP 进行多线程处理,并且多个线程同时访问同一个文件。为了避免由于多线程导致的问题,我们总是在 OpenMP 关键语句中包含函数调用:

我知道 Microsoft Visual C++ 运行时包含多个函数,如、_fseek_nolock等...例如,该函数被描述为_fread_nolock_fwrite_nolock_fread_nolock()

此函数是 fread 的非锁定版本。它与 fread 相同,只是它不受其他线程的干扰。它可能会更快,因为它不会产生锁定其他线程的开销。仅在线程安全上下文中使用此函数,例如单线程应用程序或调用范围已处理线程隔离的情况。

现在我的问题是:我了解该函数会阻止“重入”调用,因此在其他线程返回之前没有其他线程会进入该函数。但是,我不明白为什么有必要以这种方式保护单个功能。恕我直言,所有访问/修改文件指针(_file在代码示例中)的函数都必须受到保护,因此必须是线程安全的。这需要围绕实际调用标准 C 函数 fseek 和 fread 的整个函数块构建一个锁,所以我看不出提供这种非阻塞函数的意义。

有人可以向我解释这些锁定机制,因为我认为我们的偏执锁定方案会浪费一些性能吗?

先感谢您!

0 投票
4 回答
5471 浏览

c - 使用 fseek() 读取文件的最后 50 个字符

我正在尝试通过执行以下操作来读取文件中的最后 50 个字符:

这不会返回任何远程有意义的东西。为什么?