创建的文件中没有任何内容
Created file has nothing in it
所以我想让我的程序在打开和关闭时保持持久性我假设我必须用一个文件来做这个,这个程序是一个使用结构的工资单程序。这里有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);
}
employee 在它的结构中有一些东西,所以我知道它不是空的,如果有人能解释 fwrite 的参数那就太好了!
您似乎将长期标准 fopen()
函数的用法与 C11 中新增的 fopen_s()
函数的用法混淆了。后者 returns 错误代码,而不是流指针。您正在用该错误代码覆盖它通过第一个参数设置的流指针。
如果程序成功打开文件,它returns 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);
}
/* ... */
}
所以我想让我的程序在打开和关闭时保持持久性我假设我必须用一个文件来做这个,这个程序是一个使用结构的工资单程序。这里有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);
}
employee 在它的结构中有一些东西,所以我知道它不是空的,如果有人能解释 fwrite 的参数那就太好了!
您似乎将长期标准 fopen()
函数的用法与 C11 中新增的 fopen_s()
函数的用法混淆了。后者 returns 错误代码,而不是流指针。您正在用该错误代码覆盖它通过第一个参数设置的流指针。
如果程序成功打开文件,它returns 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);
}
/* ... */
}