我有vector<string> files
五个文件的名称:
C:\目录\d.txt
C:\目录\e.txt
C:\目录\f.txt
C:\目录\g.txt
C:\目录\h.txt
当我尝试files
使用此代码显示内容和大小时:
int a = files.size();
int b = 0;
cout<<a<<endl;;
for(b; b<a ;b++)
{
cout<<files[b]<<endl;
}
它工作正常 - 文件名和矢量大小都可以。现在我必须删除这些文件,所以我修改了我的代码,如下所示:
int a = files.size();
int b = 0;
for(b; b<a ;b++)
{
if(remove(files[b]) == 0)
{
cout<<GetLastError();
cout<<"\nRemoved: "<<files[b]<<endl;
}
}
但它没有工作 - 应用程序因错误而崩溃:
调试断言失败!
程序:C:\Windows\system32\MSVCP110D.dll 文件:c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector 行:1140
表达式:向量下标超出范围
有关您的程序如何导致断言失败的信息,请参阅有关断言的 Visual C++ 文档。
(按重试调试应用程序)
并且 GetLastError 在成功删除后返回代码 18(没有更多文件。)。
输出:
18 删除:C:\Directory\d.txt
18 删除:C:\Directory\f.txt
18 删除:C:\Directory\h.txt
Files:d.txt
和f.txt
确实h.txt
被删除了,但e.txt
并g.txt
没有。第二个和第四个文件始终保留而不被删除。如果我创建了具有 7 个文件名的新向量,我的代码将删除第 1 个、第 3 个、第 5 个和第 7 个文件。
我想知道为什么?我的代码的哪一部分忽略了所有其他文件?
PS。我正在使用 Visual Studio 2012。
更新:
remove() 函数是 windows.h 头文件中的标准函数。我不写我自己的。
vector<string>files
应该没问题 - 我添加了files.push_back("C:\\Directory\d.txt")
- 和五次这样的项目。
@ChrisCM 帮助我删除文件:当我替换行时:
if(remove(files[b]) == 0)
用他的台词:
if(remove(files[files.size() - 1]) == 0)
它删除了所有文件,但应用程序仍然因错误“调试断言失败!...”而崩溃(整个消息在这篇文章的顶部)。