2010-05-01 26 views
11

Diverse piattaforme utilizzano schemi di separatori di linea diversi (LF, CR-LF, CR, NEL, SEPARATOR LINE Unicode, ecc.). Le librerie di runtime C++ (e C) rendono molto trasparente questo per la maggior parte dei programmi, convertendo '\n' da e verso la codifica della nuova linea nativa della piattaforma di destinazione. Ma se il tuo programma ha bisogno di determinare l'effettiva sequenza di byte utilizzata, come potresti farlo in modo portabile?Modo portatile per determinare il separatore di linea della piattaforma

Il metodo migliore che è venuta in mente è:

  1. scrivere un file temporaneo in modalità testo con un solo '\n' in essa, lasciando che il run-time fare la traduzione.
  2. Rileva il file temporaneo in modalità binaria per visualizzare i byte effettivi.

Che sensazione. C'è un modo per farlo senza file temporanei? Ho provato invece le sequenze di stringhe, ma il tempo di esecuzione in realtà non traduce '\n' in quel contesto (che ha senso). Il tempo di esecuzione espone queste informazioni in qualche altro modo?

risposta

7

Non sono un esperto C/C++, ma non sembra esserci nulla nella libreria standard che fornirà direttamente il separatore di riga. La traduzione viene gestita in modo trasparente dalle funzioni del file in modalità testo.

Anche se ritieni che il tuo approccio sia "kludgy", è probabilmente il più semplice e affidabile, dal momento che stai veramente testando quale separatore di linea è stato utilizzato e scritto. Ed è portatile, dal momento che si utilizzano le funzioni di libreria standard per scrivere e leggere il file.

Problemi correlati