2017-09-22 2 views
2

L'extrait de code ci-dessous provoque mauvais résultat:C++ CStdioFile :: WriteString donne une sortie de fichier incorrect

void CTesterDlg::OnClickedButtonTest() 
{ 
    CStdioFile myfile; 
    CString strLine1; 
    CString strLine2; 
    myfile.Open(_T("D:\Test1.csv"), CFile::modeWrite | CFile::modeCreate); 
    strLine1 = L"01001,01001,2017-09-22,09:38:18.6,Alarm,STEERING PORT A – NO DATA RECEIVED,,,,0.0,Normal,0,1,0, ,127,0\n"; 
    strLine2 = L"Monkey, Animal\n"; 
    myfile.WriteString(strLine2); 
    myfile.WriteString(strLine1); 
    myfile.WriteString(strLine2); 

    myfile.Close(); 
} 

quand on regarde l'intérieur Test1.csv fichier

Singe, animaux
01001,01001,2017 -09-22,09: 38: 18.6, alarme, direction PORT A
Singe, animal

tout le strLine1 après

"..PORT A" "- NO> DONNÉES REÇU 0,0 ,,,,, Normal, 0,1,0,, 127,0 \ n"

a été supprimé? Toutes les idées sont les bienvenues.

+0

J'utilise MSVS2015 SP3 C++ – user6469877

+0

Veuillez ajouter des informations supplémentaires dans la question et non dans les commentaires. Vous pouvez [modifier] votre question une fois que vous l'avez soumise. –

+1

Vous avez un mélange de '_T (" ... ")' et 'L" ... "', qui peut être différent ou différent selon vos réglages de construction. – crashmstr

Répondre

2

Vous avez un problème d'encodage de chaîne. Avis que le dans votre code source est un En-tiret (Unicode code point U + 2013), pas un Hyphen-Minus. Changez-le en un trait d'union moins (point de code Unicode U + 002D) et votre texte devrait apparaître dans le fichier de sortie.

+0

Pour la compatibilité UTF-16, vous devez utiliser l'indicateur 'CFile :: typeUnicode', mais vous avez besoin du lecteur UTF-16, ce n'est pas très compatible. Sinon, vous pouvez supprimer 'CStdioFile' et utiliser UTF-8, ou assurez-vous simplement que tous les caractères sont ANSI –

+0

merci beaucoup, c'était le problème! – user6469877