问题标签 [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.
c++ - 确定大于 4GB 的文件的大小
代码当前执行此操作,并且 fgetpos 确实处理大于 4GB 的文件,但搜索返回错误,所以知道如何搜索到 a 的末尾file > 4GB
吗?
c - fseek / 循环倒带
我有一个代码中的情况,其中有一个巨大的函数可以逐行解析记录,验证并写入另一个文件。
如果文件中有错误,它会调用另一个拒绝记录并写入拒绝原因的函数。
由于程序中的内存泄漏,它与 SIGSEGV 一起崩溃。从崩溃的地方“重新启动”文件的一种解决方案是将最后处理的记录写入一个简单文件。
为此,需要将处理循环中的当前记录号写入文件。如何确保数据在循环内的文件上被覆盖?
使用 fseek 在循环中首先定位/倒带会降低性能吗?
记录的数量可能很多,有时(高达 500K)。
谢谢。
编辑:内存泄漏已经修复。重新启动解决方案被建议作为一种额外的安全措施和手段,以提供重新启动机制以及 SKIP n 记录解决方案。很抱歉没有早点提及。
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
在文本模式下使用
php - PHP fseek() 等效于变量?
我需要的是 PHPfseek()
功能的等价物。该函数适用于文件,但我有一个包含二进制数据的变量,我想处理它。我知道我可以使用substr()
,但这会很糟糕 - 它用于字符串,而不是二进制数据。此外,创建文件然后使用fseek()
也不是我想要的。
也许是用流构建的东西?
编辑:好的,我快到了:
警告:无法打开流:rfc2397:非法参数
c - C malloc/free + fgets 性能
当我遍历文件 A 中的行时,我正在解析该行并将每个字符串 ( char*
) 放入char**
.
在一行的末尾,我运行一个过程,该过程包括打开文件 B,使用fgets
,fseek
并fgetc
从该文件中获取字符。然后我关闭文件 B。
我为每一行重复重新打开和重新关闭文件 B。
我想知道的是:
malloc
使用and是否会对性能产生重大影响free
,因此我应该使用静态的东西myArray[NUM_STRINGS][MAX_STRING_WIDTH]
而不是动态的东西char** myArray
?打开和关闭文件 B 是否有显着的性能开销(从概念上讲,数千次)?如果我的文件 A 已排序,有没有办法让我
fseek
在文件 B 中“向后”移动,以重置我之前在文件 B 中的位置?
编辑结果证明,一种双重方法大大减少了运行时间:
我的文件 B 实际上是二十四个文件之一。而不是打开同一个文件 B1 一千次,然后打开 B2 一千次,等等。我打开文件 B1 一次,关闭它,B2 一次,关闭它等等。这将数千次
fopen
操作减少fclose
到大约 24 次。我曾经
rewind()
重置文件指针。
这产生了大约 60 倍的速度提升,这已经绰绰有余了。谢谢你指点我rewind()
。
linux - 关于找文件位置的问题
我之前的问题是关于原始数据读写的,但是出现了一个新的问题,似乎没有结局......
问题是:函数的参数像lseek()
orfseek()
都是 4 个字节。如果我想将跨度移动到 4G 之上,那是不可能的。我知道在 Win32 中有一个函数SetPointer(...,Hign, Low,....)
,这个指针可以生成 64 字节的指针,这就是我想要的。
但是如果我想在 Linux 或 Unix 中创建一个应用程序(创建一个文件或直接写入原始驱动器扇区),我该如何移动到 4G 上的指针?
谢谢,等待您的回复...
c - 为什么在更新模式的读写之间总是需要 fseek 或 fflush?
fopen
问:我正在尝试通过使用mode 、读取某个字符串并写回修改后的字符串来就地更新文件"r+"
,但它不起作用。A:一定要
fseek
在你写之前调用,既要回到你试图覆盖的字符串的开头,又因为在读/写“+”模式下读和写之间总是需要一个fseek
或。fflush
我的问题是为什么 fseek
或fflush
总是需要在读/写“+”模式下读写之间?Andrew Koenig 的
C Traps and Pitfalls (1989) 第 5.2 节提到这是因为向后兼容问题。谁能详细解释一下?
c - C 编程 ftell fseek fread,读取文件的大小
我有一个文件。我读了文件的大小。然后我一次循环读取两个字节,直到到达文件末尾。每次读取操作后,我将当前位置增加 2,但是在我达到文件大小的一半后位置不会增加,fread 操作将读取 0 个字节。
程序读取文件大小。我执行 fread (每次 2 个字节),直到当前位置等于文件的大小。它读取文件大小的 22915 个字节它在每次读取后将位置增加 2,但是当当前位置达到 11459 时,它是文件大小的一半,它将读取零字节,从而进入无限循环。
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 的整个函数块构建一个锁,所以我看不出提供这种非阻塞函数的意义。
有人可以向我解释这些锁定机制,因为我认为我们的偏执锁定方案会浪费一些性能吗?
先感谢您!
c - 使用 fseek() 读取文件的最后 50 个字符
我正在尝试通过执行以下操作来读取文件中的最后 50 个字符:
这不会返回任何远程有意义的东西。为什么?