从文件中读取

时间:2013-12-14 08:42:37

标签: c file

昨天在我班上,我们第一次开始使用文件。我想看看它是如何工作的,所以我创建了一个程序,我写了一个单词,并且该单词必须写在某个文件中(该部分有效)。之后,我想从该文件中读取一些字符并在屏幕上显示。

#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,这意味着我在从文件中读取时做错了。

4 个答案:

答案 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_RDONLY0)。这还不是你的主要问题;它将成为一个。