fopen() returns 写入 SD 卡时参数无效?
fopen() returns inavlid argument when writing on SD card?
我正在尝试在 SD 卡上写入文件(如果它已插入套件)。否则,该文件应写入项目的当前目录。
我可以毫无问题地将文件写入项目目录。
但是,当我尝试将其写入插入的 SD 卡时,它 returns Invalide argument
!
FILE* open_file(void)
{
char filename[40];
struct tm *timenow;
time_t now = time(NULL);
if(card_inserted())
{
// Write to a file in the SD card
if(!card_mounted())
{
system("mount /dev/mmcblk0p1 /media/sdcard/");
}
// Change directory from the project's dir to the SD card dir
chdir("/media/sdcard/");
}
timenow = gmtime(&now);
strftime(filename, sizeof(filename), "logs/data_%Y-%m-%d_%H:%M:%S.txt", timenow);
// Open a file to save the received data in (appending mode)
FILE *f = fopen(filename, "w");
if (f == NULL)
{
perror("Error opening file!\n");
abort();
}
return f;
}
我尝试将文件名中的 :
更改为 -
。这导致错误更改为 Input/output error
.
我也试过不使用chdir()
。相反,直接执行以下操作:
strftime(filename, sizeof(filename), "/media/sdcard/logs/data_%Y-%m-%d_%H-%M-%S.txt", timenow);
这没有解决问题 -> Invalid argument
。
我确定 SD 卡已安装到 /media/sdcard/
,我可以使用终端在其中创建一个文件,没有任何问题。
什么会导致此错误以及如何解决?
更新
我确保在 运行 程序之前正确安装了 SD 卡。这并没有解决问题。
此外,当我尝试将文件写入 SD 卡时使用正常名称,而不是当前数据和时间,它没有任何问题!!
以下是我更新后的代码:
FILE* open_file(void)
{
struct tm *timenow;
time_t now = time(NULL);
if(card_inserted() && write_to_card)
{
char *filename;
filename = "/media/sdcard/logs/data.txt";
FILE *f = fopen(filename, "w");
if (f == NULL)
pabort("Error opening file!\n");
return f;
}
else
{
char filename[40];
timenow = gmtime(&now);
strftime(filename, sizeof(filename), "logs/data_%Y-%m-%d_%H:%M:%S.txt", timenow);
FILE *f = fopen(filename, "w");
if (f == NULL)
pabort("Error opening file!\n");
return f;
}
}
SD 卡可能正在使用 FAT/NTFS 文件系统,并且 FAT/NTFS 文件系统中的文件名不能包含 :
字符(以及其他一些字符)。
如果将格式字符串中的 :
替换为 -
,那么它应该也适用于 SD 卡。
我正在尝试在 SD 卡上写入文件(如果它已插入套件)。否则,该文件应写入项目的当前目录。
我可以毫无问题地将文件写入项目目录。
但是,当我尝试将其写入插入的 SD 卡时,它 returns Invalide argument
!
FILE* open_file(void)
{
char filename[40];
struct tm *timenow;
time_t now = time(NULL);
if(card_inserted())
{
// Write to a file in the SD card
if(!card_mounted())
{
system("mount /dev/mmcblk0p1 /media/sdcard/");
}
// Change directory from the project's dir to the SD card dir
chdir("/media/sdcard/");
}
timenow = gmtime(&now);
strftime(filename, sizeof(filename), "logs/data_%Y-%m-%d_%H:%M:%S.txt", timenow);
// Open a file to save the received data in (appending mode)
FILE *f = fopen(filename, "w");
if (f == NULL)
{
perror("Error opening file!\n");
abort();
}
return f;
}
我尝试将文件名中的 :
更改为 -
。这导致错误更改为 Input/output error
.
我也试过不使用chdir()
。相反,直接执行以下操作:
strftime(filename, sizeof(filename), "/media/sdcard/logs/data_%Y-%m-%d_%H-%M-%S.txt", timenow);
这没有解决问题 -> Invalid argument
。
我确定 SD 卡已安装到 /media/sdcard/
,我可以使用终端在其中创建一个文件,没有任何问题。
什么会导致此错误以及如何解决?
更新
我确保在 运行 程序之前正确安装了 SD 卡。这并没有解决问题。
此外,当我尝试将文件写入 SD 卡时使用正常名称,而不是当前数据和时间,它没有任何问题!!
以下是我更新后的代码:
FILE* open_file(void)
{
struct tm *timenow;
time_t now = time(NULL);
if(card_inserted() && write_to_card)
{
char *filename;
filename = "/media/sdcard/logs/data.txt";
FILE *f = fopen(filename, "w");
if (f == NULL)
pabort("Error opening file!\n");
return f;
}
else
{
char filename[40];
timenow = gmtime(&now);
strftime(filename, sizeof(filename), "logs/data_%Y-%m-%d_%H:%M:%S.txt", timenow);
FILE *f = fopen(filename, "w");
if (f == NULL)
pabort("Error opening file!\n");
return f;
}
}
SD 卡可能正在使用 FAT/NTFS 文件系统,并且 FAT/NTFS 文件系统中的文件名不能包含 :
字符(以及其他一些字符)。
如果将格式字符串中的 :
替换为 -
,那么它应该也适用于 SD 卡。