问题标签 [ftell]
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 - 用C覆盖文件中的行,奇怪的输出
我正在尝试逐行浏览文件(每行不超过 50 个字符),将每个字符移动 10 或 -10(加密和解密),然后在旧字符串所在的位置打印移动后的字符串。但我得到了一些非常有趣的输出。
继承人的代码:
所以如果 tester.csv 最初读取
运行程序产生
c++ - C 编程 fwrite 跳转到文件末尾
我正在编写一个 C 模块,但遇到了一个以前从未见过的有趣问题。
当我运行模块时,我得到如下打印输出:
我已将文件指针设置为文件的开头。当我写一些数据时,它应该在我寻找的位置写出数据,然后用写入的字节数(在本例中为 8)增加文件位置。但是,当我执行 ftell 时,位置似乎突然跳到了 6018(恰好是文件的原始大小加 8)。
为什么会发生这种情况以及如何防止这种行为?
c++ - c++中fwrite的工作
我正在尝试在写入文件时模拟竞争条件。这就是我正在做的事情。
- 在process1中以追加模式打开a.txt
- 在 process1 中写“hello world”
- 在 process1 中打印 ftell,即 11
- 让process1进入睡眠状态
- 在 process2 中以追加模式再次打开 a.txt
- 在 process2 中写入“hello world”(正确附加到文件末尾)
- 在 process2 中打印 ftell 为 22(正确)
- 在 process2 中写“再见世界”(这正确地附加到文件的末尾)。
- 进程2退出
- process1 恢复并打印其 ftell 值,即 11。
- 用 process1 写“再见世界” --- 我假设 process1 的 ftell 是 11,这应该覆盖文件。
但是,process1 的写入是写入文件末尾,进程之间没有写入争用。
我使用 fopen 作为fopen("./a.txt", "a+)
谁能告诉我为什么会出现这种行为以及如何在写入文件时模拟竞争条件?
进程1的代码:
在process2中,我已经注释掉了该sleep
声明。
我正在使用以下脚本运行:
谢谢你的时间。
c - 当读取更多字符时,'ftell()' 返回值是否保证更大?
我明白,在仔细阅读cplusplus.com的 C 库参考之后,“对于文本流,数值[由 ftell() 返回]可能没有意义”
我的问题是:这是否意味着我不能绝对确定当我读取 3000 个字符时返回的值会大于仅读取 3 个字符时返回的值?
提前致谢,
若昂席尔瓦。
c++ - 将文件读入字符串缓冲区并检测 EOF
我正在打开一个文件并将其内容放入字符串缓冲区中,以对每个字符进行一些词法分析。这样做可以比使用后续的fread()调用更快地完成解析,并且由于源文件将始终不大于几 MB,因此我可以放心,将始终读取文件的全部内容.
但是,检测何时没有更多数据要解析似乎有些麻烦,因为ftell()经常给我一个整数值,该整数值高于文件中的实际字符数。如果尾随字符始终为 -1,则使用 EOF (-1) 宏不会有问题……但情况并非总是如此……
这是我打开文件并将其读入字符串缓冲区的方式:
这似乎总是工作得很好。下面是一个简单的循环,它一次检查一个字符的字符串缓冲区的内容,如下所示:
文件的尾随字节通常是一系列ý (-3)和« (-85)字符,因此永远不会检测到 EOF。相反,循环只是继续前进,直到nPos最终具有比fileSize更高的值——这对于正确的词法分析来说是不可取的,因为您通常最终会跳过流中的最后一个标记,它在末尾省略了换行符。
在基本拉丁字符集中,假设 EOF 字符是具有负值的任何字符是否安全?或者也许有更好的方法来解决这个问题?
#EDIT:我刚刚尝试将feof()函数实现到我的循环中,但同样,它似乎也没有检测到 EOF。
c - ftell 在超过 2GB 的位置
在 32 位系统上,ftell
如果以二进制模式打开的文件的当前位置指示器超过 2GB 点,会返回什么?在C99标准中,这种未定义的行为ftell
是否必须返回long int
(最大值为2**31-1
)?
c - Equivalent of fseek and ftell in main
I would like to know if there is an equivalent of fseek
and ftell
when I'm working in main.
For example, if I type the name of a file when asked, at end I hit enter. Next I'll ask the user another file name, but there's a '\n'
in the buffer that was not read. The user won't be able to type the name of the second file because the program will read the '\n'
. So I would like to move one position forward in the buffer. Normally in a file I would do:
I would like to do the same thing when I'm in main, not working with a file.
c - ftell 返回 -1 并导致程序崩溃
谁能告诉我我在这里用 ftell 做错了什么?
我只是在 C 中乱搞,我发现以下代码向我发送了一个终端消息 -1,这意味着根据https://publib.boulder.ibm.com/infocenter/zos/v1r13/index的错误.jsp?topic=%2Fcom.ibm.zos.r13.bpxbd00%2Fftell.htm,并使程序崩溃。
我做错了什么?它与指针有关吗?
谢谢
该程序应该迭代's'(一次打印一个字母到f),同时还打印到终端,它沿着数组遍历了多远。0 = H、1 = e、2 = y 等
c - 为什么 ftell 不能正确计算文件中的字母数?
我想计算文件中的字母数。我已经尝试使用 Windows 和 Linux 测试编辑器编写文件,但两者都给出相同的值 (7)。该文件有 5 个字符('P','2','\n','#','\n'),为什么 ftell 返回值 7 而不是 5?
Ps:即使ai从'rb'模式变为'r'模式,它也会继续给出答案7,尽管在第二种模式(r)中它会打印一些垃圾。该文件使用 Notepad++ 保存为 test.txt。有 '\n' 表示我按下了 Enter 按钮:
c - ftell 返回不正确的值
我遇到了 ftell 返回错误值的问题。我的代码在 linux 上的 netbeans 中运行时报告正确,但完全相同的代码在 windows 上的 netbeans 中运行(使用 mingw)报告不正确。文件指针指向在 BINARY_READ 中打开的文件。在我的 linux netbeans 中,运行我的子程序后,ftell 报告 35。在我的 windows netbeans 中,调用相同的子程序后,ftell 是 3621。我跟踪了我的子程序,以下语句似乎导致了问题:
在我的 linux netbeans 上,此语句后的 ftell(fp) 为 1。但在我的 windows netbeans 上,此语句后的 ftell(fp) 为 3585。
什么可能导致问题?