昨天在我班上,我们第一次开始使用文件。我想看看它是如何工作的,所以我创建了一个程序,我写了一个单词,并且该单词必须写在某个文件中(该部分有效)。之后,我想从该文件中读取一些字符并在屏幕上显示。
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <sys/stat.h>
#include <process.h>
#include <fcntl.h>
#include <string.h>
int main()
{
int df,m;
char c[50],d[50];
printf("c= \n");
gets(c);
m=strlen(c);
df=open("e:\\codeblocks\\fisperimente\\text2.txt",O_RDONLY|O_WRONLY);
if (df==-1) {printf("error");exit(1);}
write(df,c,m);
/*int i,n;
n=read(df,d,5);
for (i=1;i<=n;i++)
{
printf("%c",d[i]);
} */
close(df);
return 0;
}
我在评论中提到的是不起作用的部分。我注意到如果我printf n,它返回-1,这意味着我在从文件中读取时做错了。
答案 0 :(得分:3)
首先,我会不惜一切代价避免gets()
。它不安全,被视为已弃用。它可能会在将来删除。相反,请考虑使用fgets()
,如下所示:
fgets(c, sizeof(c), stdin);
接下来,您的open
可疑:
df=open("e:\\codeblocks\\fisperimente\\text2.txt",O_RDONLY|O_WRONLY);
只读和只写是互斥的。如果要为读取和写入打开文件,则需要O_RDWR
。
最后,在您写入文件后,文件指针指向文件末尾。如果你想重读它,你需要回头看。这样就可以了:
lseek(df, 0, SEEK_SET);
完成后,您可以重新阅读文件。
答案 1 :(得分:2)
你需要寻找文件的开头,然后回读它的内容。或者您可以关闭它或再次打开它进行阅读。
答案 2 :(得分:1)
尝试使用标志O_RDWR
,或者只读的结果和只写标志不是你认为的那样;)
答案 3 :(得分:1)
请注意,模式O_RDWR
通常不等于O_RDONLY | O_WRONLY
。因此,您可能使用O_WRONLY
打开了文件(通常,O_RDONLY
为0
)。这还不是你的主要问题;它将成为一个。