R2Delta
R2Delta

Reputation: 29

Change file/path extension

Using VC++, how can I remove the extension from the following file path and change it to a new extension(using strings):

CString path(_T(m_DirTree.GetCurrentDir()));             // copy file path to variable 'path' of type CString

//Add code here....

The path to the file in question is L:\PowerStar 5 Demo II\Programs\Demo\Programs\33100.PRG and I would like to change the file extension to 33100.CRC. Is there some way I could use _splitpath to change the file extension to .CRC? This path is one of many which can be selected via a directory tree that is passed to variable path and I am just using this particular path as an example. So I cannot alter it as below:

CString path(_T("L:\PowerStar 5 Demo II\Programs\Demo\Programs\33100.CRC"));

Is it possible to concatenate the strings so I can open without getting an exception?

char drive[_MAX_DRIVE]; 
char dir[_MAX_DIR]; 
char fname[_MAX_FNAME]; 
char ext[_MAX_EXT];


// Split path to isolate file extension(.prg) for if statement 

_splitpath(m_DirTree.GetCurrentDir(), drive, dir, fname, ext);

CString crcFile; 

crcFile = strcat(fname,".CRC");  // concatenate chars to point to .CRC file of same name


FILE *cr = fopen(fname, "r");  // Handle to the file in question

The above code throws an unhandled exception.

Upvotes: 0

Views: 2947

Answers (2)

snowdude
snowdude

Reputation: 3874

Try using the Shell API function PathRenameExtension. Or if you want the buffer management handled for you CPathT::RenameExtension, for example:

CPath path(_T("L:\\PowerStar 5 Demo II\\Programs\\Demo\\Programs\\33100.PRG"));
path.RenameExtension(_T(".CRC"));
CString modifiedPath = path;

Upvotes: 3

Mr.Yellow
Mr.Yellow

Reputation: 198

CString has 2 methods, which might help you. ReverseFind() and Left()

CString filenameWithoutExtension = path.Left(path.ReverseFind(_T('.')));

Then you can add your new file extension (e.g. ".exe") at the end of the new string.

path = filenameWithoutExtension + _T(".exe");

Upvotes: 2

Related Questions