我有两个问题, 第二个文件n_cartelle_mod.txt未完全从n_cartelle.txt更改 第二个问题是赋值nomi_txt [续] = n_cartelle [i] 为什么? 问题在于for子在哪里,当找到一个txt文件并且在有赋值之后。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv) {
string arg = argv[2];
int arch;
string cambia ="cd ";
string cartella = argv[1];
vector <string> n_cartelle;
vector <string> nomi_txt;
int cont = 0;
//start code
if(argc == 3) {
cambia += cartella.substr();
cambia += " && dir > n_cartelle.txt";
const char * c_cambia = cambia.c_str();
arch = system(c_cambia);
if(arch == 0)
cout << "\n Cartella cambiata con successo"<<endl
<<"\n Documento di testo con nome e tipo di file creato con successo"<<endl;
else{
cout << "\nErrore nella chiamata a SYSTEM"<<endl;
exit(EXIT_FAILURE);
}
//decifro il file creato:
//prendo le stringhe dal file-----------------------------------------------
ifstream in("n_cartelle.txt");
ofstream out("n_cartelle_mod.txt");
string linea;
while(getline(in,linea)){
if(linea.size() < 2)
out << "0000000000000000000000000000000000000000000000000\n";
else
out << linea<<"\n";
//n_cartelle.push_back(linea);
}
cout << "File creato e modificato, vado avanti\n";
string linea2;
ifstream in2("n_cartelle_mod.txt");
while(getline(in2,linea2))
n_cartelle.push_back(linea2);
cout << "Caricato il <vector>\n";
//-------------------------END-------------------------------------------
//problem is here
for(int i=0; i < n_cartelle.size()-4; ++i){
cout <<"i volte: "<<i<<endl;
if(n_cartelle[i].substr(n_cartelle[i].size()-3) == "txt"){
cout << "capperi\n";
nomi_txt[cont] = n_cartelle[i];
cont++;
}
}
}
else {
cout << "Parametri inesatti.\n\n"
<< "Esempio di utilizzo:\n Search.exe c:\\\\User paolo"<<endl;
}
答案 0 :(得分:2)
在out
之前,您需要关闭ifstream in2("n_cartelle_mod.txt");
。默认情况下,输出到文件是缓冲的,在执行此操作之前,最后一个输出块不会刷新到文件中。
或者您可以在endl
行中使用"\n"
代替out <<
;这会输出换行符并刷新缓冲区。
答案 1 :(得分:1)
nomi_txt[cont] = n_cartelle[i];
由于您从未设置nomi_txt
的大小,这将导致未定义的行为,因为您将访问向量范围之外的元素。如果您希望nomi_txt
与n_cartelle
具有相同数量的元素,则需要调整其大小:
nomi_txt.resize(n_cartelle.size());
在循环之前。
Barmar已经提到了在重新打开文件进行输入之前关闭std::ofstream
的问题。
答案 2 :(得分:0)
出现的一个问题是n_cartelle
循环中跳过for
中的最后2个向量项:
for(int i=0; i < n_cartelle.size()-4; ++i) {
此外,我认为nomi_text
应使用.push_back
或类似函数向其中添加元素,而不是对可能尚不存在的索引进行索引分配。
答案 3 :(得分:0)
您必须替换此声明
nomi_txt[cont] = n_cartelle[i];
的
nomi_txt.push_back( n_cartelle[i] );
因为vector nomi_txt为空,您可能不会使用下标运算符来访问不存在的元素。