创建的文件中没有任何内容

时间:2015-03-20 20:13:29

标签: c arrays struct fwrite

所以我想让我的程序在打开和关闭时保持持久性我假设我必须用文件执行此操作,该程序是使用结构的工资单程序。这里有2个问题1.对于这种类型,二进制文件会更容易吗?我听说txt文件很复杂但不确定原因。 2.这是我的代码运行没有错误但是当我去文件时没有写入内部。这些是我的两个结构

typedef struct{
    int day;
    int month;
    int year;
}DATE;

typedef struct{
    char name[100];
    int age;
    float hrsWorked;
    float hrlyWage;
    float regPay;
    float otPay;
    float totalPay;
    DATE payDate;

}PAYROLL;

和代码

void backUp(PAYROLL employee[], long int *pCounter)
{
    FILE *record = fopen_s(&record, "c:\\record.bin", "wb");
    if (record != NULL){
        fwrite(employee, sizeof(PAYROLL), 1, record);
        fclose(record);
    }

员工的结构中有东西所以我知道如果有人可以解释fwrite的参数非常棒,那么它就不是空的了。

1 个答案:

答案 0 :(得分:2)

您似乎将长期标准fopen()函数的使用与新的C11 fopen_s()函数的使用混为一谈。后者返回错误代码,而不是流指针。您正在通过带有该错误代码的第一个参数覆盖它设置的流指针。

如果程序成功打开文件,则返回0。将其设置为record的值后,record将等于NULL(在Microsoft的C实现中),因此您甚至不会尝试编写。如果你抓住了那个案子并打印了一个诊断信息,那么你就会有一个线索(虽然是误导性的)。

你应该这样做:

void backUp(PAYROLL employee[], long int *pCounter)
{
    FILE *record;
    errno_t result = fopen_s(&record, "c:\\record.bin", "wb");

    if (result == 0) {
        fwrite(employee, sizeof(PAYROLL), 1, record);
        fclose(record);
    }
    /* ... */
}