更改文件/路径扩展名

Change file/path extension

本文关键字:路径 扩展名 文件      更新时间:2023-10-16

使用VC++,我如何从以下文件路径中删除扩展名并将其更改为新的扩展名(使用字符串):

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

有问题的文件的路径是L:\PowerStar 5 Demo II\Programs\Demo\Programs \33100.PRG,我想将文件扩展名更改为33100.CRC。有没有办法使用_splitpath将文件扩展名将更改为。CRC?这个路径是可以通过传递给可变路径的目录树选择的众多路径之一,我只是以这个特定路径为例。所以我不能更改如下:

CString path(_T("L:PowerStar 5 Demo IIProgramsDemoPrograms33100.CRC"));

有没有可能将字符串连接起来,这样我就可以打开而不会出现异常?

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

上面的代码引发了一个未处理的异常。

尝试使用Shell API函数PathRenameExtension。或者,如果您希望为您处理缓冲区管理CPathT::RenameExtension,例如:

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

CString有两个方法,它们可能会对您有所帮助。ReverseFind()和Left()

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

然后,您可以在新字符串的末尾添加新的文件扩展名(例如".exe")。

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