具有意外输出的 fstream
fstream with unexpected output
我需要帮助来弄清楚为什么输出文件中有一些额外的符号。无论在原始文本文件中放入什么,它们总是有 10 个。
非常感谢您的宝贵时间!
"plain.txt"
Mus velit, tincidunt vitae in enim id egestas eget.
Nibh libero dignissim vitae elit. Quisque eleifend blandit pharetra
quisque.
Ridiculus ac quam nisl suspendisse. Litora.
Nostra torquent urna cursus fermentum nec magnis lobortis posuere
ultricies phasellus ultricies tellus mattis massa sagittis.
Porta dolor aliquam iaculis.
Litora. Maecenas nulla donec laoreet sit.
Congue tempor habitasse, pulvinar purus erat proin ante hendrerit
hendrerit.
Quam magna nibh sociosqu libero mi Laoreet pede vel.
Suspendisse eu. Laoreet potenti enim, ad.
Turpis augue viverra hendrerit praesent tristique velit.
Dapibus ut a tortor vitae purus nisi.
Pharetra molestie inceptos volutpat. Egestas bibendum ad ipsum diam.
Lorem.
"coded.txt"
Qyw$zipmx0$xmrgmhyrx$zmxei$mr$irmq$mh$ikiwxew$ikix2
Rmfl$pmfivs$hmkrmwwmq$zmxei$ipmx2$Uymwuyi$ipimjirh$fperhmx$tlevixve$uymwuyi2
Vmhmgypyw$eg$uyeq$rmwp$wywtirhmwwi2$Pmxsve2
Tsvxe$hspsv$epmuyeq$megypmw2 Pmxsve2$Qeigirew$ryppe$hsrig$pesviix$wmx2
Gsrkyi$xiqtsv$lefmxewwi0$typzmrev$tyvyw$ivex$tvsmr$erxi$lirhvivmx$lirhvivmx2
Uyeq$qekre$rmfl$wsgmswuy$pmfivs$qm$Pesviix$tihi$zip2
Wywtirhmwwi$iy2$Pesviix$tsxirxm$irmq0$eh2
Xyvtmw$eykyi$zmzivve$lirhvivmx$tveiwirx$xvmwxmuyi$zipmx2
Hetmfyw$yx$e$xsvxsv$zmxei$tyvyw$rmwm2
Tlevixve$qspiwxmi$mrgitxsw$zspyxtex2$Ikiwxew$fmfirhyq$eh$mtwyq$hmeq2$Psviq2Qyw$zipmx0$xmrgmhyrx$zmxei$mr$irmq$mh$ikiwxew$ikix2
Rmfl$pmfivs$hmkrmwwmq$zmxei$ipmx2$Uymwuyi$ipimjirh$fperhmx$tlevixve$uymwuyi2
Vmhmgypyw$eg$uyeq$rmwp$wywtirhmwwi2$Pmxsve2
Tsvxe$hspsv$epmuyeq$megypmw2
Pmxsve2$Qeigirew$ryppe$hsrig$pesviix$wmx2
Gsrkyi$xiqtsv$lefmxewwi0$typzmrev$tyvyw$ivex$tvsmr$erxi$lirhvivmx$lirhvivmx2
Uyeq$qekre$rmfl$wsgmswuy$pmfivs$qm$Pesviix$tihi$zip2
Wywtirhmwwi$iy2$Pesviix$tsxirxm$irmq0$eh2
Xyvtmw$eykyi$zmzivve$lirhvivmx$tveiwirx$xvmwxmuyi$zipmx2
Hetmfyw$yx$e$xsvxsv$zmxei$tyvyw$rmwm2
Tlevixve$qspiwxmi$mrgitxsw$zspyxtex2$Ikiwxew$fmfirhyq$eh$mtwyq$hmeq2$Psviq2ムムムムムムムムムム These symbols after number 2 are not supposed to be here.
#include <iostream>
#include <fstream>
using namespace std;
const char FILEIN[] = "plain.txt";
const char FILEOUT[] = "coded.txt";
int main()
{
ifstream inFile;
ofstream outFile;
inFile.open(FILEIN);
outFile.open(FILEOUT);
if (inFile.is_open() && outFile.is_open())
{
inFile.seekg (0, inFile.end);
int size = inFile.tellg();
inFile.seekg (0, inFile.beg);
cout << size << endl;
char * block = new char[size];
inFile.read(block, size);
for (int i = 0; i < size; ++i)
if (block[i] != '\n') block[i] += 4;
outFile.write(block, size);
cout << endl << "File encrypted" << endl;
inFile.close(); outFile.close();
}
else cout << "Unable to access files" << endl;
return 0;
}
使用ifstream::read
读取文件内容时,需要以二进制方式打开文件。同样,当您使用ofstream::write
写入文件时,也需要以二进制方式打开文件。
inFile.open(FILEIN, std::ios::bin);
outFile.open(FILEOUT, std::ios::bin);
这是处理各种平台处理换行符的不同方式所必需的。
size
returns 每个换行包含两个字符的数字。然而,当读取数据时,这两个字符仅作为一个字符读入。如果你有一个只有一行的文件,比如:
test
size
的值为6,当数据准备好后,第五个字符为'\n'
,第六个字符为垃圾。写完后,输出将有垃圾。
我需要帮助来弄清楚为什么输出文件中有一些额外的符号。无论在原始文本文件中放入什么,它们总是有 10 个。 非常感谢您的宝贵时间!
"plain.txt"
Mus velit, tincidunt vitae in enim id egestas eget.
Nibh libero dignissim vitae elit. Quisque eleifend blandit pharetra quisque.
Ridiculus ac quam nisl suspendisse. Litora.
Nostra torquent urna cursus fermentum nec magnis lobortis posuere ultricies phasellus ultricies tellus mattis massa sagittis.
Porta dolor aliquam iaculis.
Litora. Maecenas nulla donec laoreet sit.
Congue tempor habitasse, pulvinar purus erat proin ante hendrerit hendrerit.
Quam magna nibh sociosqu libero mi Laoreet pede vel.
Suspendisse eu. Laoreet potenti enim, ad.
Turpis augue viverra hendrerit praesent tristique velit.
Dapibus ut a tortor vitae purus nisi.
Pharetra molestie inceptos volutpat. Egestas bibendum ad ipsum diam. Lorem.
"coded.txt"
Qyw$zipmx0$xmrgmhyrx$zmxei$mr$irmq$mh$ikiwxew$ikix2 Rmfl$pmfivs$hmkrmwwmq$zmxei$ipmx2$Uymwuyi$ipimjirh$fperhmx$tlevixve$uymwuyi2 Vmhmgypyw$eg$uyeq$rmwp$wywtirhmwwi2$Pmxsve2 Tsvxe$hspsv$epmuyeq$megypmw2 Pmxsve2$Qeigirew$ryppe$hsrig$pesviix$wmx2 Gsrkyi$xiqtsv$lefmxewwi0$typzmrev$tyvyw$ivex$tvsmr$erxi$lirhvivmx$lirhvivmx2 Uyeq$qekre$rmfl$wsgmswuy$pmfivs$qm$Pesviix$tihi$zip2 Wywtirhmwwi$iy2$Pesviix$tsxirxm$irmq0$eh2 Xyvtmw$eykyi$zmzivve$lirhvivmx$tveiwirx$xvmwxmuyi$zipmx2 Hetmfyw$yx$e$xsvxsv$zmxei$tyvyw$rmwm2 Tlevixve$qspiwxmi$mrgitxsw$zspyxtex2$Ikiwxew$fmfirhyq$eh$mtwyq$hmeq2$Psviq2Qyw$zipmx0$xmrgmhyrx$zmxei$mr$irmq$mh$ikiwxew$ikix2 Rmfl$pmfivs$hmkrmwwmq$zmxei$ipmx2$Uymwuyi$ipimjirh$fperhmx$tlevixve$uymwuyi2 Vmhmgypyw$eg$uyeq$rmwp$wywtirhmwwi2$Pmxsve2 Tsvxe$hspsv$epmuyeq$megypmw2 Pmxsve2$Qeigirew$ryppe$hsrig$pesviix$wmx2 Gsrkyi$xiqtsv$lefmxewwi0$typzmrev$tyvyw$ivex$tvsmr$erxi$lirhvivmx$lirhvivmx2 Uyeq$qekre$rmfl$wsgmswuy$pmfivs$qm$Pesviix$tihi$zip2 Wywtirhmwwi$iy2$Pesviix$tsxirxm$irmq0$eh2 Xyvtmw$eykyi$zmzivve$lirhvivmx$tveiwirx$xvmwxmuyi$zipmx2 Hetmfyw$yx$e$xsvxsv$zmxei$tyvyw$rmwm2 Tlevixve$qspiwxmi$mrgitxsw$zspyxtex2$Ikiwxew$fmfirhyq$eh$mtwyq$hmeq2$Psviq2ムムムムムムムムムム These symbols after number 2 are not supposed to be here.
#include <iostream>
#include <fstream>
using namespace std;
const char FILEIN[] = "plain.txt";
const char FILEOUT[] = "coded.txt";
int main()
{
ifstream inFile;
ofstream outFile;
inFile.open(FILEIN);
outFile.open(FILEOUT);
if (inFile.is_open() && outFile.is_open())
{
inFile.seekg (0, inFile.end);
int size = inFile.tellg();
inFile.seekg (0, inFile.beg);
cout << size << endl;
char * block = new char[size];
inFile.read(block, size);
for (int i = 0; i < size; ++i)
if (block[i] != '\n') block[i] += 4;
outFile.write(block, size);
cout << endl << "File encrypted" << endl;
inFile.close(); outFile.close();
}
else cout << "Unable to access files" << endl;
return 0;
}
使用ifstream::read
读取文件内容时,需要以二进制方式打开文件。同样,当您使用ofstream::write
写入文件时,也需要以二进制方式打开文件。
inFile.open(FILEIN, std::ios::bin);
outFile.open(FILEOUT, std::ios::bin);
这是处理各种平台处理换行符的不同方式所必需的。
size
returns 每个换行包含两个字符的数字。然而,当读取数据时,这两个字符仅作为一个字符读入。如果你有一个只有一行的文件,比如:
test
size
的值为6,当数据准备好后,第五个字符为'\n'
,第六个字符为垃圾。写完后,输出将有垃圾。