gpt4 book ai didi

c++ - remove() 函数删除所有其他文件

转载 作者:行者123 更新时间:2023-11-28 07:27:23 24 4
gpt4 key购买 nike

我有vector<string> files五个文件的名称:

C:\Directory\d.txt

C:\Directory\e.txt

C:\Directory\f.txt

C:\Directory\g.txt

C:\Directory\h.txt

当我尝试显示内容和大小时 files使用此代码:

int a = files.size();
int b = 0;

cout<<a<<endl;;

for(b; b<a ;b++)
{
cout<<files[b]<<endl;
}

它工作正常 - 文件名和 vector 大小没问题。现在我必须删除这些文件,所以我修改了我的代码:

int a = files.size();
int b = 0;

for(b; b<a ;b++)
{
if(remove(files[b]) == 0)
{
cout<<GetLastError();
cout<<"\nRemoved: "<<files[b]<<endl;
}
}

但它没有工作 - 应用程序因错误而崩溃:

Debug Assertion Failed!

Program: C:\Windows\system32\MSVCP110D.dll File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector Line: 1140

Expression: vector subscript out of range

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

删除成功后,GetLastError 返回代码 18(没有更多文件。)。

输出:

18 Removed: C:\Directory\d.txt

18 Removed: C:\Directory\f.txt

18 Removed: C:\Directory\h.txt

文件:d.txt , f.txth.txt确实被删除了,但是e.txtg.txt不是。第二个和第四个文件始终保留并且不会被删除。如果我创建包含 7 个文件名的新 vector ,我的代码将删除第 1、3、5 和 7 个文件。

我想知道为什么?我的代码的哪一部分忽略了所有其他文件?

附言。我正在使用 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)

它删除了所有文件,但应用程序仍然崩溃并出现错误“Debug Assertion Failed!...”(本文顶部的整个消息)。

最佳答案

我发现您的删除代码很可能正在重新调整数组中项目的位置。示例:

012345

删除 2 后你有

01345

不是

01_345

因此,您想删除数组 files.size() 次的第 0 个元素(或者最后一个元素可能更优化)。所以替换这一行:

if(remove(files[b]) == 0)

有了这个:

if(remove(files[0]) == 0)

或者最好

if(remove(files[files.size() - 1]) == 0)

但这当然取决于您对 remove 的实现,但鉴于您对症状的解释,我发现这种解释很可能。

您也需要调整您的 for 循环以使用此逻辑,否则您将尝试访问 vector 中不再存在的值:

while(files.size()) {
cout << "\nRemoving: " << files.back() << endl;
remove(files.back());
//Add your error handling here if you wish.
}

关于c++ - remove() 函数删除所有其他文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514821/

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