2017-11-07 29 views
1

raspberry pi 3でQtを使用してUSBフラッシュメモリにテキストファイルをコピーしたときに、Windowsでこれらのテキストファイルを開くと、テキストファイル'\n'がWindowsで動作しないように見えます。Qtを使用してLinuxテキストファイルをWindowsテキストファイルに変換するにはどうすればよいですか?

このトピックを検索したところ、LinuxとWindowsではテキストファイルの形式が異なることがわかりました.LinuxベースのテキストファイルをFlashメモリにQtでコピーしてWindows上で開く必要があります。

+0

? – Hamed

答えて

1

改行を示す文字がいくつかあります。通常のものは次の2つです:

'\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF). 
'\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR). 

異なるオペレーティングシステムは、異なる方法で改行を処理します。ここでは最も一般的なものの短いリストは、次のとおりです。

DOSとWindows:

彼らは、改行は(10続くか13)2つの文字の組み合わせ、すなわち'\r\n'ことを期待しています。

のUnix(したがって、Linuxなども):

Unixのは、新しい行を示すために、単一の'\n'を使用しています。

マックは:

Macは単一'\r'を使用しています。

EDIT: Mac OSXはUnixであり、\nを使用しています。 \rは古代のMac OS9です

+1

Mac OSXはUnixで、 '\ n'を使います。単一の '\ r'は古代のMac OS9です。 – MSalters

+0

@MSalters正解、私は私の答えを編集します。 – Hamed

0

私はファイルを転送しているだけで何もしていないと思いますが、それを開いて改行を書き直す以外の方法は考えられません。

Windows上で.txtファイルを開き、そこから(C++またはC++/Qtを使用して)読み込み、新しいファイルに書き込むときに行を書き込むと、行末はWindowsのsepcificsに適合するはずです。

あなたは、このようなファイルを読むことができます:

std::ifstream file; 
file.open(filePath);  

std::ofstream file2; 
file2.open(filePath2); 

while(std::getline(file, line)) 
{ 
    file2<<line; 
} 

std::getline

は、少なくともドキュメントは '\ nの' のgetlineの検索が、それはWindowsとUnix上で動作するべきであると述べています。そうでなければ、delimeterを '\ n'に設定することができます。

あなたはラズベリーのファイル「Windowslike」を書きたい場合は、あなたが「\ n」の文字を置換しようとすることができる「\ rを\ n」の

それは次のように何とかなります。

'\ n' のための検索を見つける
std::string myFileAsString; 
std::string toReplace = "\n"; 
std::string replaceWith = "\r\n"; 
myFileAsString.replace(myFileAsString.find(toReplace), toReplace.length(), replaceWith); 

、その後はに置き換え '\ rを\ n' はどのように `\ rを\ N 'について

replace find

関連する問題