2017-09-15 3 views
2

J'essaie de convertir un fichier Windows (format CP1252) en format UTF-8 pour une application Linux. Je veux exécuter la commande suivante dans le cadre de mon application C++:Exécution de la commande 'iconv' pour un fichier transmis comme arguments de fonction dans l'application C++

iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf

Le nom du fichier file.ldf sera transmis comme argument à la main().

par ex.

int main (int argc, char* argv[]) 
{ 
    string FileName = "Invalid"; 
    if (argc == 2) { 
     FileName = argv[1]; 
     system("iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf"); 
     //do further parsing on file       
    } 
    else 
     cout << "ERROR:: invalid number of arguments"<< endl; 
    return 0; 
} 

Le problème que je suis confronté est actuellement à passer le filename entrant dans le cadre de la commande à exécuter en utilisant l'API system.
Existe-t-il un autre moyen de résoudre ce problème?

+1

Vous * savez * que vous pouvez ajouter des chaînes en utilisant l'opérateur '+'? Comme par exemple "" iconv -f CP1252 -t UTF-8 "+ NomFichier +" | dos2unix> out.ldf "' –

+0

aargh !! Je réalise maintenant que c'est une question stupide en effet. :( – user3098732

Répondre

1

Modifier ceci:

system("iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf"); 

à ceci:

system("iconv -f CP1252 -t UTF-8 " + FileName + " |dos2unix > out.ldf"); 

où je l'opérateur + surchargé de std::string, concaténation de chaînes.