我是std
命名空间的菜鸟,我正在编写循环遍历目录中所有 jpeg 文件并删除任何感叹号的代码。我正在尝试使用std::string
and std::vector
。我的问题是我的变量 tempname:const char tempname = (char) *filelist[j].c_str();
随着向量中的字符串的filelist
变化而变化(它不应该 - 它是一个常量变量。这是我的 WinMain 函数的内容:
std::vector<std::string> filelist;
if (!dirExists(directory)) //checks if a directory exists
{
CreateDirectory("resized", NULL);
}
std::vector<std::string> filelist = findFiles("*.jpg"); //finds files in its directory with a given extension
int result; //for rename function
for (unsigned int j=0; j< filelist.size(); j++)
{
std::string::size_type pos = filelist[j].find("!"); //check for exclamation points
if (std::string::npos != pos) //found one at index "pos" in the string
{
switch (MessageBox(window, (LPCSTR)filelist[j].c_str(), "Illegal filename - Rename?", MB_YESNO)) //user input
{
case IDYES:
{
const char tempname = (char) *filelist[j].c_str(); //the problem
//attempt to remove the exclamation point
result = rename(&tempname, filelist[j].erase(pos, 1).c_str());
if (result == 0)
MessageBox(window, "Renamed File", "Information", MB_OK);
else
MessageBox(window, "Error renaming file", "Error", MB_OK);
break;
}
case IDNO:
{
break;
}
}
}
}
假设文件名包含不超过一个感叹号。如果我将 tempname 定义为 aconst char*
这将是有意义的,因为它将是一个指针 - 如果 tempname 指向const
的数据发生更改,则 tempname 的值可以更改而不会违反声明。但是拿走指针,我很困惑。