2016-09-28 48 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()调用失败。