int main(){
std::cout << "Insert file name / or path. \n NOTE: ONLY INPUTS. DELETES PREVIOUS DATA.\nV.6" << std::endl;
std::string filen;
std::cin >> filen;
std::ofstream myFile;
try{
myFile.open(filen, std::ios::out);
}
catch(std::fstream::failure){
std::cout << "Could not open file!\n Make sure the name and data type are valid.";
system("pause");
}
while(true){
int press = getch();
if(press == 43) myFile.close();
if(press == 8){myFile << "\b" << " " << "\b";std::cout << "\b" << " " << "\b" << std::flush;}
if(press == 13){ myFile << "\n"; std::cout << "\n" << std::flush;}
if(press != 43 && press != 127 && press != 13 && press != 8){myFile << (char)press;std::cout << (char)press;}
}
return 0;
}
每当我选择一个文本文件并按退格键时,我检查文档,当我检查文本文档时,我会得到如下随机字符:
答案 0 :(得分:4)
那些不是&#34;随机字符&#34 ;;那些是退格人物!即你提供的输入。
这可以使用十六进制编辑器进行验证(或通过hexdump
等方式管理程序输出。)
如果您希望复制常见shell的行为,您必须编写自己的代码来识别退格符,而不是将其附加到myFile
,而是删除之前输入的字符
答案 1 :(得分:2)
正如@BoundaryImposition指出的那样,将"\b"
写入您的文件,实际上会将二进制退格符写入您的文件。您可能需要的是myFile.seekp(-1, std::ios_base::cur);
。如果你在win / dos机器上,你可能需要额外注意'\n'
个字符,因为它们在写入文本流时会被翻译成0x0d 0x0a
(因此它们需要找回2个位置而不是1个)。
但一般情况下,如果您不处理非常大的文件,将内容存储在std::string
(使用pop_back
或erase
,以删除字符会更容易如果需要)并在完成后将其写入文件。