2016-09-28 84 views
0

對不起,這傢伙的基本問題,但我有一個問題只是讓fwrite()正常工作?fwrite()失敗,沒有寫任何東西到現有的文件

#include <iostream> 
#include <fstream> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
using namespace std; 

int main() { 

    FILE* fd = NULL; 
    fd = fopen("out","rw"); 

    if (fd == NULL) { 
     printf("Open failed\n"); 
     return -1; 
    } 

    int error = 0; 

    printf("Attempting write ... \n"); 
    char buff[] = {"hello?\n"}; 

    if((error = fwrite(buff, 1, 7, fd)) != 7) { 
     printf("fwrite() failed with code %d \n", error); 
     return -1; 
    } 

    fclose(fd); 

    return 0; 
} 

此代碼失敗 - fwrite()剛剛返回0,當它應該返回7而不是用於寫入文件7個1B字符。該文件確實存在於相同的目錄中;我已經嘗試完整的文件路徑,而不是;我已經chmod'd輸出文件out爲777萬一是這個問題(它不是); fread()fseek()都按預期工作,但爲了簡潔起見,我已將它們取出。

我在這裏做錯了什麼?任何幫助表示讚賞。

+0

這看起來像一個'c'問題而不是'C++',你應該改正標記 –

+0

@appleapple你是對的 - 我必須在代碼的某些部分使用C庫,但總體項目我工作是技術上使用C++ – APaul

回答

0

fopen沒有"rw"模式,您應該以二進制模式打開文件,因爲您的文件爲fwrite

你想要的是"wb""w+b""r+b"

+0

是的,出於某種原因,我認爲模式會一起走(如在「r」和「w」在一起應該是「rw」)。我的錯誤實際上與將「rw」更改爲「r +」一樣簡單:/ – APaul

0
fd = fopen("out","rw"); 

「RW」 是不是有效的打開方式之一。

有關更多信息,請參閱fopen(3) manual page

您沒有指定您的平臺或C庫。在Linux上,這個fopen()調用失敗。