2009-08-18 6 views
1

Je viens de passer de Builder 6 à Builder 2009 et j'ai une question.Ecrire une chaîne unicode dans un fichier avec CodeGear C++ Builder 2009

Comment écrire une chaîne unicode dans un fichier?

TBytes Preamble1 = TEncoding::Unicode->GetPreamble(); 
UnicodeString str1("string1"); 
int len = TEncoding::Unicode->GetByteCount(str1); 

FileWrite(iFile,&Preamble1[0],Preamble1.Length); 

FileWrite(iFile,str1.c_str(),len); 

Ceci est ce que je fais maintenant, mais je suppose qu'il devrait y avoir une certaine façon native.
Btw, est-ce OK pour obtenir le préambule une fois et supposer que pendant la durée de vie de l'application il ne change pas? De la documentation disponible pour UnicodeString il semble que c'est toujours UTF-16 LE

+0

CodeGear C++ ne prend-il pas en charge les bibliothèques C++ standard? Pourquoi n'utilisez-vous pas std :: wstring et std :: ofstream pour faire le travail? – Sahas

+0

Pouvez-vous, s'il vous plaît, fournir un exemple de travail? Je n'ai jamais utilisé de fonctions stl Unicode, seulement des fonctions régulières. – Andrew

Répondre

3

Ma première question serait "Quel type de fichier"?

En supposant que c'est un fichier texte plutôt que binaire, quel type d'encodage voulez-vous sur la sortie? UTF-8 est généralement un bon choix, car il est supporté par des choses comme le bloc-notes, et pour les caractères "latins" normaux, il n'y a pas de surcharge. Personnellement, pour écrire des fichiers texte «simples», j'ajoute simplement des chaînes à une TStringList, puis j'utilise la méthode SaveToFile.

TStringList *list = new TStringList; 
list->Add(str1); 
list->Add(str2); 
... 
list->SaveToFile(filename, TEncoding::UTF8); 
+0

Bonne réponse. Merci. Oui, je posais des questions sur de simples fichiers texte. Mon objectif principal était d'implémenter la journalisation Unicode. J'ai donc fini par écrire une simple classe de template qui ouvre le fichier avec le type d'encodage sélectionné (UTF-8, UTF-16 BE/LE) et juste avec FileWrite. Pour une action d'écriture unique, votre option semble la meilleure. – Andrew

Questions connexes