私は ac プロジェクトに取り組んでおり、ディレクトリ内からファイルを削除する必要があります。なんらかの理由で、ファイルまたはディレクトリが存在しないため削除できないと言い続けます。以下は、ファイルを削除するために使用しているコードです。
void deleteOldestLog()
{
FILE *fp;
char path[FILE_PATH_BUF_LEN], *fileName;
fp = popen("ls -tr /home/myfolder/logs/ |head -1", "r");
if (fp == NULL)
{
printf("Failed to run command");
}
else
{
char removalPath[FILE_PATH_BUF_LEN];
while ((fileName = fgets(path, sizeof(path)-1, fp)) != NULL)
{
sprintf(removalPath, "/home/myfolder/logs/%s", fileName, sizeof(fileName)-1);
printf("Removing file: %s", removalPath);
if (remove(removalPath) != 0)
{
perror("ERROR DELETING LOG");
}
else
{
printf("Successfully deleted %s", removalPath);
}
break;
}
pclose(fp);
}
}
ファイルが存在しないためファイルが見つからないと言っていますが、これが真実ではないことはわかっています。なぜならll
、cプログラムが出力したパスを実行すると、削除しようとしているファイルが返されるからです。
fgets が文字列の末尾に '\0' を配置しているため、削除が機能しなくなっている可能性があると思います。
どうすればこれを修正できますか?