![]() |
|
|
|
#1
|
|||
|
|||
|
Just some small remarks regarding your program.
It seems that it can not handle well an extension of 1 or 2 characters or more than 3 characters. You should start from the back of the file name (argv[1]) and search for the last point '.' character. And BTW, you don't need to use strcat in case you have at least 3 characters for extension. Just find the last '.' in the name and replace the next 4 characters with "BAK" and '\0'. The other remarks from piccolo also remain. |
|
#2
|
|||
|
|||
|
Don't know if it's useful for you, but you could use the API PathRenameExtension , which is in shlwapi.dll, this API replace any extension with any extension you want:
PathRenameExtension ("file.ext", ".bak"); Hope it works for you, just #include <shlwapi.h> This only works in windows, off course... |
|
#3
|
|||
|
|||
|
Here is a generalized routine good for your situation
and can be easily tailored or adapted to fit most any situation: // EX: OPEN A FILE FOR LOGGING OUTPUT IN ANALYZE MODE. // Find the last '\\' to obtain a pointer to just the base file name part if your buffer contains any path type info // We could just as eaily searched for last '.' to obtain base file name extension pointer. Code:
char *szBuffer = buffer;
PCSTR pszBaseName = strrchr( szBuffer, '\\' );
if ( pszBaseName ) // We found a '\\', so advance to the base FILE name
{
// Increment 1 byte past our pointer
pszBaseName++;
strncpy(pszBaseName, "Asprlog.txt\0", 12); // we need 12 to include '\0'
null char
//replace base file name with newname , here you could have appended
bak or BAK extension if you had searched on the '.' char Ex: as so:
strncpy(pszBaseName, "bak\0", 4);
}
FILE * pFile;
pFile=fopen(szBuffer,"wt"); // open for write
cheers! |
![]() |
| Thread Tools | |
| Display Modes | |
|
|