c - 从中文件
FREAD字符我有一个虚拟的计划,在一个文件中写入一些字符:c - 从中文件
int main (int argc, char **argv)
{
char i = '0';
int j = 0;
FILE * fp = NULL;
fp = fopen("num.txt","w+");
if(!fp){
printf("fopen failed\n");
return -1;
}
fseek(fp, SEEK_SET, 0);
while(1){
if (j >500) {
fclose(fp);
return 0;
}
usleep(5000);
fwrite(&i,sizeof(char),1,fp);
if (j%27 ==0) {
i ='0';
}
i++;
j++;
}
fclose(fp);
return 0;
}
而另一个程序中,我需要从文件中读取,这里是一个片段:
if ((num = fopen("num.txt", "r+")) == NULL){
perror("Error al obrir l'arxiu");
}
fseek(num, posicio, SEEK_SET);
fread(resposta, sizeof(char), offset, fp);
while(contador <500){
printf("%c",resposta[contador]);
contador++;
}
printf(" la resposta contiene %s \n",resposta);A
我想从位置“posicio”读取“偏移”字符。 “resposta”是500个字符的数组。当你在第二个程序中看到的是因为我很绝望,当我执行第二个程序时,在控制台中出现了一堆符号,例如:xMh 在最后的printf。
我试图在字节中读取字节,但它不断让我看到这些符号,我不知道可能会这样做,我的第一个怀疑是我以某种方式以二进制模式打开文件,但不!
因此,这是你的第一个程序的一些不错的格式重新写入
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char i = '0';
int j = 0;
FILE *fp;
fp = fopen("num.txt", "w+");
/*fseek(fp, SEEK_SET, 0); - NOT NEEDED*/
if (fp != NULL)
{
for (j=0; j<500; j++)
{
usleep(5000);
fwrite(&i, sizeof(char), 1, fp);
fflush(fp);
if (j % 27 == 0)
i = '0';
i++; /* could be put in the for() loop header */
}
fclose(fp);
}
return 0;
}
而且
void readBlock(int posicio, int offset, char *resposta)
{
int i;
FILE *num = fopen("num.txt", "r+");
if (num != NULL)
{
/* reposition to <posicio> bytes from the start of the file */
fseek(num, posicio, SEEK_SET);
/* read <offset> bytes from that position */
fread(resposta, sizeof(char), offset, num);
fclose(num);
/* dump out the bytes */
for (i=0; i<offset; i++)
{
printf("%c", resposta[i]);
}
}
}
注意,在您的代码段#2,你用打开文件变量“num”中的句柄,然后从句柄“fp”中读取。这是故意的吗?它看起来像一个bug,但很难从这里说出来。
谢谢,确实这是一个错误。但现在我得到的问题“太多打开的文件” – Asdemuertes
啊是的 - 我忘了fclose()。如果你有太多打开的文件,你也会忘记。 – Kingsley
顺便说一句:我添加了fflush(),因为我假设你正在读取文件在一个单独的线程或进程中。如果没有刷新,您无法真正了解是否/何时该文件已被操作系统写入。 – Kingsley
忽略第一个程序。将一些纯文本放入“num.txt”中,并用此测试第二个程序。确认你正在获取文件中的内容。你是否正在寻找文件的结尾?检查fread()的返回值,它应该等于。 –
Kingsley
我需要的fseek,我不想从头开始阅读。从正常的文本我一直得到相同的不正确的输出 – Asdemuertes
你试图实现与(j%27 == 0) - 循环的信我回到了一些点? – Kingsley