问题标签 [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.
php - 拆分和合并文件
我有一种解决方案的“开始”。我写了这个函数(对不起间距):
(再次,对不起。:))
它给出了将文件拆分为特定字节的“方向”。我试图做这样的事情:
但它会陷入无限循环。问题是什么?或者,PHP 中是否有另一种解决方案来拆分和合并文件?
c - 使用多处理从c中的文本文件逐行读取字符
您好,null
我在阅读时遇到字符问题,并尝试fseek()
在多进程程序中使用函数打印文件的字符。这是我的简单代码,
假设我进入./sample 10
命令行,所以程序将在 sample.txt 中打印 10 个字符,然后将创建 10 个子进程,每个子进程都尝试选择一个字符并打印到屏幕上。此外,如您所见,我发送i
为设置偏移量的参数。但正如我提到的,它打印为空。这是该计划的前景。
txt文件是这样的。
如果您能提供帮助,我将不胜感激,无论如何,谢谢。
编辑:我意识到我编译就像$ gcc sample.c -o sample -lpthread
它打印出空值一样。另一方面,我编译它时没有-lpthread
打印字符但不正确,例如这是文本文件。
终端给出这样的输出。
php - 构建验证码 wav 时 fseek、feof 和 fread 的 PHP 警告消息
我目前在尝试运行 fseek、feof 和 fread 时收到 PHP 警告消息(“期望参数 1 是资源”)。我相信这是因为它在每种情况下都找不到文件。
让我给你一点背景。我正在构建一个验证码 wav,然后流式传输文件。它适用于所有现代浏览器(IE 除外,但我用一些 Flash 来介绍它),但在 iOS 中速度很慢。
我相信问题出在 $fm 变量上,但我们将不胜感激。
c - 文件大小总是在变化,使用 C 和 fopen_s 函数
我写了这个基本功能:
这是获取文件大小的函数:
我一直打开相同的路径,每次尝试用“r”和“rb”打开它时都会得到不同的大小,但仍然得到相同的不同数字..
c - fseek 在 EOF 字符上
我目前正在使用fgetc()
循环读取整个文件。
但我需要EOF
在这个循环的两次迭代中检测。我知道EOF
不能使用ungetc()
.
怎么用
EOF
在使用之前获取fseek
并再次阅读它是否安全且便携?
谢谢。
c - 如何在 FILE* 上使用 SEEK_CUR
此 C 代码表示将指针从当前位置移动ftell(ptr)
到刚刚读取的结构块的开头。我对吗?
如果我是对的,我可以使用SEEK_CUR
而不是SEEK_SET
回到文件中结构块的开头吗?
请告诉我如何使用SEEK_CUR
并返回到结构块的开始。
我是编程新手。所以请帮助我。
编辑:谢谢你的答案。我要做的是搜索关键字(学生的卷号)并更新该学生的信息(姓名,地址,..)。更新的数据成功替换了之前的数据。请让我再问一个问题。有什么方法可以在以前的数据之上插入新数据而不是用旧数据替换它?
performance - MacOS 上奇怪的 fseek()/fwrite() 性能
我的Mac上fseek()
/的写入性能有问题。fwrite()
我正在处理最大 4 GB 的大文件,下面的测试是用一个只有 120 MB 的相当小的文件进行的。我的策略如下:
fopen()
磁盘上的新文件- 用零填充文件(大约需要 3 秒)
- 将小块数据写入随机位置(30.000 个块,每个 4k)
整个过程大约需要 120 秒。
写入策略绑定到图像旋转算法(请参阅我的问题here),除非有人为旋转问题提出更快的解决方案,否则我无法更改使用fseek()
然后将 4k 或更少写入文件的策略.
我观察到的是:前几千个fseek()
/fwrite()
性能相当不错,但性能下降得非常快,比任何系统缓存被填满时所期望的要快。下图显示了fwrite()
每秒 s 与以秒为单位的时间。如您所见,7 秒后fseek()
/fwrite()
速率达到约。每秒 200 次,仍在下降,直到在过程结束时达到每秒 100 次。
在该过程的中间(2 或 3 次),操作系统决定将文件内容刷新到磁盘,我可以从控制台输出中看到它挂了几秒钟,在此期间我大约有。在我的磁盘上写入 5 MB/s(这不算多)。在fclose()
系统似乎写入整个文件后,我看到 20 MB/s 的磁盘活动持续了更长的时间。
如果我fflush()
每 5.000fwrite()
秒使用一次,则行为根本不会改变。放入fclose()
/fopen()
强制冲洗以某种方式加速了整个事情。10%。
我确实描述了这个过程(下面的截图),你看,几乎所有的时间都花在了里面fwrite()
,fseek()
而且可以深入到__write_nocancel()
他们两个人身上。
完全荒谬的总结
想象一下我的输入数据完全适合我的缓冲区的情况,因此我能够线性写入我的旋转输出数据,而无需将写入过程分成片段。我仍然使用fseek()
定位文件指针,只是因为写入函数的逻辑是这样的,但在这种情况下,文件指针被设置到它已经存在的相同位置。人们预计不会对性能产生影响。错了。
荒谬的是,如果我删除fseek()
对该特殊情况的调用,我的函数会在2.7 秒内完成,而不是 120 秒。
fseek()
现在,经过很长的前言,问题是:即使我寻求相同的位置,为什么会对性能产生如此大的影响?我怎样才能加快速度(通过其他策略或其他函数调用,如果可能,禁用缓存,内存映射访问,......)?
作为参考,这是我的代码(未整理,未优化,包含大量调试输出):
我有点迷茫,因为我不明白系统如何“优化”我的通话。任何输入表示赞赏。
c - 用C覆盖文件中的行,奇怪的输出
我正在尝试逐行浏览文件(每行不超过 50 个字符),将每个字符移动 10 或 -10(加密和解密),然后在旧字符串所在的位置打印移动后的字符串。但我得到了一些非常有趣的输出。
继承人的代码:
所以如果 tester.csv 最初读取
运行程序产生
c - 可以使用 fseek() 将数据插入文件中间吗?- C
我知道函数 fseek() 可用于将数据输出到文件中的特定位置。但我想知道我是否使用 fseek() 移动到文件中间然后输出数据。新数据会覆盖旧数据吗?例如,如果我有一个包含 123456789 的文件,并且我使用 fseek() 在 5 之后输出 newdata,那么该文件将包含 12345newdata6789 还是包含 12345newdata。