C++ 覆蓋寫文件

来源:https://www.cnblogs.com/mkckr0/archive/2022/05/05/16224260.html
-Advertisement-
Play Games

寫文件有三種模式: 截斷寫,文件打開之後立即清空原有內容 附加寫,文件打開之後不清空原有內容,每次只能在文件最後寫入 覆蓋寫,文件打開之後不清空原有內容,可以在文件任意位置寫入 例如:文件原有內容為 123456,在開始位置覆蓋寫入 abcd,最後文件內容為 abcd56。首先使用下麵的代碼進行嘗試 ...


寫文件有三種模式:

  1. 截斷寫,文件打開之後立即清空原有內容
  2. 附加寫,文件打開之後不清空原有內容,每次只能在文件最後寫入
  3. 覆蓋寫,文件打開之後不清空原有內容,可以在文件任意位置寫入

例如:文件原有內容為 123456,在開始位置覆蓋寫入 abcd,最後文件內容為 abcd56。首先使用下麵的代碼進行嘗試:

#include <fstream>

int main()
{
    std::ofstream ofile("test.txt");
    ofile << "abcd";
}

輸出的結果為 abcd,原有內容被截斷了。可是並沒有設置 std::ios::trunc 標誌。ofstream 預設只設置了 std::ios::out。查閱 std::basic_filebuf<CharT,Traits>::open 發現單獨的 std::ios::out std::ios::out | std::ios::trunc 等價。想要在不設置 std::ios::truncstd::ios::app 的情況下設置 std::ios::out,只能使用 std::ios::in | std::ios::out。因此修改代碼為:

#include <fstream>

int main()
{
    std::ofstream ofile("test.txt", std::ios::in);
    ofile << "abcd";
}

成功輸出 abcd56。覆蓋寫並沒有被 C/C++ 標準直接支持,因此只能藉助這種奇怪的組合實現。在底層的 Linux 有更直接的辦法:

#include <fcntl.h>
#include <unistd.h>

int main()
{
    int fd = open("test.txt", O_WRONLY);
    write(fd, "abcd", 4);
    close(fd);
}

這段代碼只用了簡單的 O_WRONLY 標誌,就實現了覆蓋寫。

本文來自博客園,作者:mkckr0,轉載請註明原文鏈接:https://www.cnblogs.com/mkckr0/p/16224260.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 聽說10個人去互聯網公司面試,有9個人會被問到緩存雪崩和緩存穿透的問題。 聽說,這9個人裡面,至少有8個人回答得不完整。 而這8個人裡面,全都是在網上找的各種面試資料去應付的,並沒有真正理解。 當然,也很正常,只有大規模應用緩存的架構才會重點關註這兩個問題。 那麼如何真正理解這兩個問題的底層邏輯,我 ...
  • 這個問題老生常談了,大部分互聯網公司的項目都可能會遇到這樣的問題,這裡並不能給到大家一個具體的、徹底的、完美的解決方案,具體的項目、團隊情況需要具體的分析,我這裡記錄一下遇到這種問題時候的一些思考和處理方式吧。 團隊情況 來到新的公司後,擔任XX項目開發組長,主管先讓我帶5個人的團隊:2個前端、2個 ...
  • 需求 要求開發一個hello.go程式,可以輸出helloworld 開發的步驟 (1)開發這個程式/項目時,go的目錄結構怎麼處理 (2)代碼如下: ```go package main import "fmt" func main() { fmt.Println("hello,world") } ...
  • 前言 利用Python製作遠程查看別人電腦的操作記錄,與其它教程類似,都是通過郵件返回。 利用程式得到目標電腦瀏覽器當中的訪問記錄,生產一個文本併發送到你自己的郵箱,當然這個整個過程除了你把python程式植 入目標電腦外,其它的操作都是自動化的。 我知道我說到這些,有些人又開始有其它的想法了,可別 ...
  • #volatile關鍵字 ##什麼是可見性? 可見性是指線程A改變變數的值後,線程B可以馬上看到更改後變數的值 ##volatile的作用 關鍵字volatile提示線程每次從共用記憶體中讀取數據,而不是從私有記憶體中讀取,這樣就保證了同步數據的可見性 ##關鍵字volatile適用的場景 當想實現一個 ...
  • HandlerInterceptor源碼 ##3種方法: preHandle:攔截於請求剛進入時,進行判斷,需要boolean返回值,如果返回true將繼續執行,如果返回false,將不進行執行。一般用於登錄校驗。 postHandle:攔截於方法成功返回後,視圖渲染前,可以對modelAndVie ...
  • 在文章的開頭,先說下NPE問題,NPE問題就是,我們在開發中經常碰到的NullPointerException.假設我們有兩個類,他們的UML類圖如下圖所示 在這種情況下,有如下代碼 user.getAddress().getProvince(); 這種寫法,在user為null時,是有可能報Nul ...
  • 前言 大家都喜歡搞笑視頻倒放吧,視頻倒放會給人不一樣的感覺,比起按照原本的劇本,倒放的效果給人的感覺更出乎意料。所以, 我就想可不可以用Python實現視頻或者圖片倒放呢?於是,我做到了,我想把它分享給大家,讓大家跟我一起玩。 開始分享今天的技術之前,先來看幾個動圖(gif) (原圖1) (倒放1) ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...