我需要一些关于删除txt文件中最后一个字符的帮助。例如,如果我的txt文件包含1234567,我需要C ++代码删除最后一个字符,以便该文件变为123456.谢谢大家。
答案 0 :(得分:5)
在可移植代码中执行此操作的唯一方法是读入数据,并写出除最后一个字符之外的所有字符。
如果您不介意非可移植代码,大多数系统都提供截断文件的方法。传统的Unix方法是寻找你希望文件结束的地方,然后在那一点写一个0字节到文件。在Windows上,您可以使用SetEndOfFile。其他系统将使用不同的名称和/或方法,但几乎所有系统都具有某种形式的能力。
答案 1 :(得分:4)
对于便携式解决方案,这些内容应该可以胜任:
#include <fstream>
int main(){
std::ifstream fileIn( "file.txt" ); // Open for reading
std::string contents;
fileIn >> contents; // Store contents in a std::string
fileIn.close();
contents.pop_back(); // Remove last character
std::ofstream fileOut( "file.txt", std::ios::trunc ); // Open for writing (while also clearing file)
fileOut << contents; // Output contents with removed character
fileOut.close();
return 0;
}
答案 2 :(得分:2)
这是一个更强大的方法,关闭Alex Z的答案:
#include <fstream>
#include <string>
#include <sstream>
int main(){
std::ifstream fileIn( "file.txt" ); // Open for reading
std::stringstream buffer; // Store contents in a std::string
buffer << fileIn.rdbuf();
std::string contents = buffer.str();
fileIn.close();
contents.pop_back(); // Remove last character
std::ofstream fileOut( "file.txt" , std::ios::trunc); // Open for writing (while also clearing file)
fileOut << contents; // Output contents with removed character
fileOut.close();
}
诀窍是这些行,它们允许您有效地将整个文件读入字符串,而不仅仅是令牌:
std::stringstream buffer;
buffer << fileIn.rdbuf();
std::string contents = buffer.str();
这是受到Jerry Coffin在this post的第一个解决方案的启发。它应该是那里最快的解决方案。
答案 3 :(得分:1)
如果输入文件不是太大,您可以执行以下操作: -
1. Read the contents into a character array.
2. Truncate the original file.
3. Write the character array back to the file, except the last character.
如果文件太大,您可以使用临时文件而不是字符数组。但它会有点慢。