私はvector<string> files
5つのファイルの名前を持っています:
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
ファイル:とは実際には削除されますがd.txt
、とは削除されません。2 番目と 4 番目のファイルは常に残り、削除されません。7 つのファイル名で新しいベクターを作成した場合、コードは 1 番目、3 番目、5 番目、7 番目のファイルを削除します。f.txt
h.txt
e.txt
g.txt
なぜ知りたいのですか?私のコードのどの部分が他のすべてのファイルを無視しますか?
PS。Visual Studio 2012 を使用しています。
アップデート:
remove() 関数は、windows.h ヘッダーの標準関数です。私は自分自身を書きません。
vector<string>files
大丈夫なはずです-アイテムを追加しますfiles.push_back("C:\\Directory\d.txt")
-そして、このように5回。
@ChrisCMファイルの削除を手伝ってください:行を置き換えたとき:
if(remove(files[b]) == 0)
彼の行で:
if(remove(files[files.size() - 1]) == 0)
すべてのファイルを削除しますが、アプリケーションは「Debug Assertion Failed!...」というエラーで引き続きクラッシュします (この投稿の一番上のメッセージ全体)。