| iMatix home page | << | < | > | >> |
![]() Version 1.91 |
#include "sflfile.h" Bool file_cycle ( const char *filename, int how)
Cycles the file: if the file already exists, renames the existing file. This function tries to rename the file using the date of creation of the file; if this fails because an existing file had the same name, generates a guaranteed unique file name. Returns TRUE if the cycle operation succeeded, or FALSE if it failed (e.g. due to a protection problem). The how argument must be one of:
CYCLE ALWAYS | Cycle file unconditionally |
CYCLE HOURLY | Cycle file if hour has changed |
CYCLE DAILY | Cycle file if day has changed |
CYCLE WEEKLY | Cycle file if week has changed |
CYCLE MONTHLY | Cycle file if month has changed |
CYCLE NEVER | Don't cycle the file |
{ long file_time; /* Datestamp of file */ char *point, *insert_at; /* Where we start messing name */ int unique_nbr; /* To generate a unique name */ ASSERT (filename); /* If no cycling needed, do nothing */ if (!file cycle needed (filename, how)) return (TRUE); /* No errors, nothing in fact */ file_time = timer to time (get file time (filename)); strcpy (full_name, filename); point = strrchr (full_name, '.'); if (point) { strcpy (work_name, point); /* Save extension, if any */ *point = '\0'; /* and truncate original name */ } else strclr (work_name); /* We leave up to 2 original letters of the filename, then stick-in */ /* the 6-digit timestamp. */ if ((insert_at = strrchr (full_name, PATHEND)) == NULL) insert_at = full_name; else insert_at++; if (*insert_at) /* Bump insert_at twice, to leave */ insert_at++; /* up to 2 letters before we */ if (*insert_at) /* stick-in the date stamp */ insert_at++; /* Format new name for file and make sure it does not already exist */ sprintf (insert_at, "%06d", (int) (file_time / 100)); strcat (insert_at, work_name); if (file exists (full_name)) { point = strrchr (full_name, '.') + 1; for (unique_nbr = 0; unique_nbr < 1000; unique_nbr++) { sprintf (point, "%03d", unique_nbr); if (!file exists (full_name)) break; } } if (file exists (full_name)) return (FALSE); /* We give up! */ if (rename (filename, full_name)) return (FALSE); /* No permission */ else return (TRUE); /* Okay, it worked */ }
| << | < | > | >> |
![]() |