gpt4 book ai didi

c++ - 尝试向文件添加扩展名时,Rename() 函数不起作用

转载 作者:行者123 更新时间:2023-11-30 01:29:39 26 4
gpt4 key购买 nike

我有一个无扩展名的文件,我想给它添加一个 .avi 扩展名。所以我在通过打开文件对话框选择文件后调用了这个函数(我想在重命名后打开文件):

int RenameVidAddExt(HWND hWnd, char oldname[MAX_PATH])
{
int filenamesize=0, n=0;
char extension [] = ".avi";
char* newname;

for (n=0 ; oldname[n]!=NULL ; n++)
{
filenamesize++;
}

newname = new char[filenamesize+sizeof(extension)];

newname = oldname;
strcat (newname, extension);
//SetDlgItemTextA(hWnd, IDC_EDIT1, szFile); //test print of filenameof selected file
//SetDlgItemTextA(hWnd, IDC_EDIT2, newname); //test print of newname
rename(oldname,newname);
return 0;
}

文件名没有改变,我不知道为什么。测试打印显示 oldnamenewname 都包含正确的字符串(旧的没有扩展名,新的有扩展名)。

最佳答案

由于您使用的是 C++,请考虑也使用 std::string:

int RenameVidAddExt(HWND hWnd, char oldname[MAX_PATH])
{
char extension [] = ".avi";
std::string newname = oldname;

newname += extension;

rename(oldname, newname.c_str());

return 0;
}

一些旁注:

  1. 请记住,当您使用newnew[] 时,您必须使用deletedelete[]稍后(当不再需要使用 newnew[] 创建的对象时)。
  2. 在玩字符串时,尽量使用std::string。它将使您不必手动处理内存,并且可以将它们分配/复制到其他变量。
  3. 与其使用 new[],通常建议使用 std::vector。将 vector 调整为所需大小。当您需要指向第一个元素的指针时,请使用 &vec[0]。使用 std::vector 的好处是内存管理是为您完成的。
  4. 不要手动计算字符串的长度,使用类似strlen 的函数。或者,可以使用 str.length() 获取 std::string 的长度。

关于c++ - 尝试向文件添加扩展名时,Rename() 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com