使用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 II\Programs\Demo\Programs\33100.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
上面的代码抛出了一个未处理的异常。
答案 0 :(得分:3)
尝试使用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;
答案 1 :(得分:2)
CString有两种方法,可能对您有所帮助。 ReverseFind()和Left()
CString filenameWithoutExtension = path.Left(path.ReverseFind(_T('.')));
然后,您可以在新字符串的末尾添加新的文件扩展名(例如“.exe”)。
path = filenameWithoutExtension + _T(".exe");