我想讀取並從txt文件中刪除第一行(沒有複製,它是一個巨大的文件)。
我已經讀過網絡,但是每個人都只是將所需內容複製到一個新文件。我不能那樣做。從txt文件中讀取並刪除第一行(或最後一行)而不復制
低於第一次嘗試。這段代碼將被刪除,因爲沒有行被刪除。如果代碼將在每次開啓時刪除第一行文件,代碼將會結束。
#include <iostream>
#include <string>
#include <fstream>
#include <boost/interprocess/sync/file_lock.hpp>
int main() {
std::string line;
std::fstream file;
boost::interprocess::file_lock lock("test.lock");
while (true) {
std::cout << "locking\n";
lock.lock();
file.open("test.txt", std::fstream::in|std::fstream::out);
if (!file.is_open()) {
std::cout << "can't open file\n";
file.close();
lock.unlock();
break;
}
else if (!std::getline(file,line)) {
std::cout << "empty file\n"; //
file.close(); // never
lock.unlock(); // reached
break; //
}
else {
// remove first line
file.close();
lock.unlock();
// do something with line
}
}
}
文件只是不工作方式(類似於原始數組,你不能刪除第一個元素,而不是將所有剩餘元素移動一個時隙)。 – crashmstr
'if'語句的每個分支都有'file.close(); lock.unlock();'。 'std :: file'對象的析構函數將關閉文件,所以你不需要顯式關閉它(當'file.is_open()'返回false時,不需要關閉它)。毫無疑問,Boost中的RAII類型用於管理該鎖,並使用析構函數將其解鎖。 –
是的,「所有人」... https://www.google.com/search?q=c%2B%2B+modify+file+in+place –