2013-12-14 90 views
0

昨天在我的課堂上,我們第一次開始使用文件。我想看看它是如何工作的,所以我編寫了一個程序,在那裏我寫了一個字,並且這個字必須寫在一個特定的文件中(該部分工作)。之後,我想從該文件中讀取一些字符並將其顯示在屏幕上。從文件中讀取

#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,這意味着我從文件中讀取時做了錯誤。

回答

2

您需要尋找文件的開頭,然後再讀取它的內容。或者,您可以關閉它或再次打開閱讀。

1

嘗試使用標誌O_RDWR,只讀,只寫標誌的或運算結果不是你所想象的那樣;)

1

注意模式O_RDWR通常不等於O_RDONLY | O_WRONLY。因此,您可能打開了文件O_WRONLY(典型地,O_RDONLY0)。這還不是你的主要問題;它將成爲一個。

+0

我O_RDONLY使用| O_WRONLY因爲那是我們的教授告訴過我們,我們可以讀取和寫入文件。我使用了邁克爾的建議,我重新打開了它,並且它工作了(當我第二次打開它時,我只使用了RD_ONLY),然後我意識到從第一次打開我的RDONLY是無用的。謝謝大家,問題解決了。 – user3078259

+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); 

一旦你這樣做,你可以閱讀您的文件早在

+0

嘿,lseek的第三個參數是什麼意思? – user3078259

+0

第二個參數是偏移量。第三個參數說明這個偏移量是相對於什麼的。 'SEEK_SET'的意思是「相對於文件的開頭」。 「SEEK_CUR」的意思是「相對於當前位置」。 'SEEK_END'的意思是「相對於文件末尾」。 –

+0

@ user3078259:如果其中一個答案確實回答了您的問題,請務必將該答案標記爲「已接受」。然後它會從「未答覆」列表中刪除您的問題。謝謝! –