2014-09-03 122 views
0
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *f; 
    f = fopen("my file.txt", "w"); 
    int n = 5; 
    fprintf(f, "n equals to %d", n); 
    fclose(f); 
    f = fopen("my file2.txt", "w"); 
    char *txt = "New file"; 
    fwrite(txt, 1, strlen(txt), f); 
    fclose(f); 
    f = fopen("my file3.txt", "w"); 
    char *txt2 = "Hello"; 
    for(int i = 0; i < strlen(txt2); i++) 
    { 
     printf("Mouse cursor at %d.\n", ftell(f)); 
     fputc(txt2[i], f); 
    } 
    fclose(f); 
    f = fopen(__FILE__, "r"); 
    char str[1024]; 
    while (!feof(f)) 
    { 
    fscanf(f, "%s", str); 
    puts(str); 
    } 
    putchar('\n'); 
    fclose(f); 
    f = fopen(__FILE__, "r"); 
    long size = fseek(f, 0, SEEK_END); 
    char *buffer = malloc(sizeof(char) * size + 1); 
    fread(buffer, 1, size, f); 
    puts(buffer); 
    free(buffer); 
    fclose(f); 
    return 0; 
} 

的代碼,您可以在這部分代碼看看:打印文件

f = fopen(__FILE__, "r"); 
long size = fseek(f, 0, SEEK_END); 
char *buffer = malloc(sizeof(char) * size + 1); 
fread(buffer, 1, size, f); 
puts(buffer); 
free(buffer); 
fclose(f); 

我試圖打印的代碼在我的文件,這是我寫的去做吧^ 當我嘗試使用puts功能進行打印時,它會打印3個字符: http://i61.tinypic.com/ortdvl.png

第三個字符在每次執行時發生更改。 無論如何,我不知道爲什麼會發生這種情況,有人可以解釋我做錯了什麼?

+4

fseek()不會返回除成功/失敗指示外有用的任何東西。要麼你找到了指定的位置,要麼你沒有。如果你想獲得文件的大小,然後尋找到最後,然後使用ftell()或stat()文件,並從那裏獲取大小數據。 – 2014-09-03 18:32:44

+1

而'ftell'不返回鼠標光標位置。 – jweyrich 2014-09-03 18:34:52

+0

我知道它不會返回鼠標光標x,y我的意思是返回像字符索引的數量?或者你怎麼說 – AALC 2014-09-03 19:03:29

回答

2
fseek(f, 0, SEEK_END); 
long size = ftell(f); 
char *buffer = calloc(size + 1, sizeof(char)); 
rewind(f); 
fread(buffer, 1, size, f); 
+0

fseek的回報,成功爲0,其他不爲0。 – BLUEPIXY 2014-09-03 18:43:30