最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang實現(xiàn)斷點續(xù)傳功能

 更新時間:2022年07月26日 17:08:36   作者:開心碼農(nóng)1號  
這篇文章主要為大家詳細介紹了Golang實現(xiàn)斷點續(xù)傳、復制文件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Golang實現(xiàn)斷點續(xù)傳的具體代碼,供大家參考,具體內(nèi)容如下

1、將文件pic_src.jpg復制到pic_des.jpg文件;

2、讀寫過程中斷時,讀寫的中斷位置會記錄在“pic_des.jpgtemp.txt”文件里;

3、下次再啟動程序時,程序會接著“pic_des.jpgtemp.txt”文件里記錄的中斷位置,繼續(xù)讀、寫文件,直到完成傳輸;

具體代碼實現(xiàn),如下:

package main
?
import (
?? ?"fmt"
?? ?"os"
?? ?"strconv"
?? ?"io"
?? ?"log"
?? ?//"time"
)
?
func main() {
?? ?/*
?? ?斷點續(xù)傳:
?? ??? ?文件傳遞:文件復制
?? ??? ?srcFile 復制到 destFile
?? ?思路:
?? ??? ?邊復制,邊記錄復制的總量(記錄總復制字節(jié)數(shù)保存至tempFile)
?? ??? ?復制一半中斷后,若再次復制,會先讀取tempFile文件里記錄的已完成字節(jié)總數(shù)
?? ??? ?然后將這個字節(jié)數(shù)作為文件讀寫offset(偏移量),
? ? ? ? 來結(jié)合whence(偏移位置)來決定后面讀寫文件的起點位置。
?? ??? ?seek(offset,whence),設置指針光標的位置
?? ??? ?第一個參數(shù):偏移量
?? ??? ?第二個參數(shù):如何設置
?? ??? ??? ?0:seekStart表示相對于文件開始,
? ? ? ? ?? ?1:seekCurrent表示相對于當前偏移量,
?? ? ? ? ? ?2:seek end表示相對于結(jié)束。
?? ? */
?
?? ?srcFile:="./0731/ddxc/pic_src.jpg"
?? ?destFile:="./0731/ddxc/pic_des.jpg"
?? ?tempFile:=destFile+"temp.txt"
?? ?file1,err:=os.Open(srcFile)
?? ?if err !=nil {
?? ??? ?log.Fatalln(err)
?? ?}
?? ?file2,_:=os.OpenFile(destFile,os.O_CREATE|os.O_WRONLY,os.ModePerm)
?? ?file3,_:=os.OpenFile(tempFile,os.O_CREATE|os.O_RDWR,os.ModePerm)
?
?? ?defer file1.Close()
?? ?defer file2.Close()
?? ?//1.讀取臨時文件中的數(shù)據(jù),根據(jù)seek
?? ?file3.Seek(0,io.SeekStart)
?? ?bs:=make([]byte,100,100)
?? ?n1,err:=file3.Read(bs)
?? ?fmt.Println(n1)
?? ?countStr:=string(bs[:n1])
?? ?fmt.Println(countStr)
?? ?count,_:=strconv.ParseInt(countStr,10,64)
?? ?fmt.Println(count)
?
?? ?//2. 設置讀,寫的偏移量
?? ?file1.Seek(count,0) // 設置file1下一次讀或者寫的起點
?? ?file2.Seek(count,0) // 設置file2下一次讀或者寫的起點
?? ?data:=make([]byte,1024,1024)
?? ?n2:=-1// 讀取的數(shù)據(jù)量, 默認值
?? ?n3:=-1//寫出的數(shù)據(jù)量
?? ?total :=int(count)//讀取的總量
?
?? ?for{
?? ??? ?//3.讀取數(shù)據(jù)
?? ??? ?// 基于上面的起點,讀取file1文件len(data)個字節(jié),
?? ??? ?// n2:實際讀取的字節(jié)數(shù)(小于等于len(data),將讀取的字節(jié)存入data。
?? ??? ?n2,err=file1.Read(data)
?? ??? ?if err ==io.EOF{
?? ??? ??? ?fmt.Println("文件復制完畢。。")
?? ??? ??? ?file3.Close()
?? ??? ??? ?//os.Remove(tempFile) //復制完,先不刪除,驗證最后存儲的字節(jié)總數(shù)是不是跟復制的文件大小一致。
?? ??? ??? ?break
?? ??? ?}
?? ??? ?//將數(shù)據(jù)寫入到目標文件
?? ??? ?// 基于上面的起點,向file2文件寫入len(data[:n2])個字節(jié),也就是寫入data中前n2個元素;
?? ??? ?// n3:實際寫入的字節(jié)數(shù)(小于等于n2)。
?? ??? ?n3,_=file2.Write(data[:n2])
?? ??? ?total += n3
?? ??? ?//將復制總量,存儲到臨時文件中
?? ??? ?file3.Seek(0,io.SeekStart) // 設置file3的下次讀寫起點為源點:0點,即覆蓋重寫。
?? ??? ?file3.WriteString(strconv.Itoa(total))
?
?? ??? ?//假裝斷電
?? ??? ?//if total>1800000{
?? ??? ?// ?panic("假裝斷電了。。。,假裝的。。。")
?? ??? ?//}
?? ?}
}

 4、檢驗下: 當文件復制完成后,pic_des.jpgtemp.txt文件里保存的字節(jié)數(shù)剛好等于傳輸文件大小,說明文件完整復制。

如下圖:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解

    Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解

    這篇文章主要為大家介紹了Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go實現(xiàn)簡單的數(shù)據(jù)庫表轉(zhuǎn)結(jié)構(gòu)體詳解

    Go實現(xiàn)簡單的數(shù)據(jù)庫表轉(zhuǎn)結(jié)構(gòu)體詳解

    這篇文章主要為大家介紹了Go實現(xiàn)簡單的數(shù)據(jù)庫表轉(zhuǎn)結(jié)構(gòu)體詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Go語言到底有沒有引用傳參(對比 C++ )

    Go語言到底有沒有引用傳參(對比 C++ )

    這篇文章主要介紹了Go 到底有沒有引用傳參(對比 C++ ),需要的朋友可以參考下
    2017-09-09
  • Golang結(jié)合ip2region實現(xiàn)ip歸屬地查詢

    Golang結(jié)合ip2region實現(xiàn)ip歸屬地查詢

    ip2region - 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn),下面我們就來看看Golang如何結(jié)合ip2region實現(xiàn)ip歸屬地查詢吧
    2024-03-03
  • 基于Go語言實現(xiàn)分金幣游戲

    基于Go語言實現(xiàn)分金幣游戲

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)分金幣游戲,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 詳解Go?依賴管理?go?mod?tidy

    詳解Go?依賴管理?go?mod?tidy

    這篇文章主要為大家介紹了詳解Go?依賴管理?go?mod?tidy,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Go中string與[]byte高效互轉(zhuǎn)的方法實例

    Go中string與[]byte高效互轉(zhuǎn)的方法實例

    string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會發(fā)生底層數(shù)據(jù)的復制,下面這篇文章主要給大家介紹了關于Go中string與[]byte高效互轉(zhuǎn)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • 使用go語言將單反斜杠改為雙反斜杠的方法

    使用go語言將單反斜杠改為雙反斜杠的方法

    最近開發(fā)的時候遇到這么個問題,就是在window上獲取了文件目錄的字段,然后將這個絕對路徑保存到數(shù)據(jù)庫,但是前端展示的時候路徑的雙反斜杠變成了單反斜杠,本文給大家介紹了使用go語言將單反斜杠改為雙反斜杠的方法,需要的朋友可以參考下
    2024-01-01
  • 使用Go語言封裝實現(xiàn)郵件發(fā)送功能

    使用Go語言封裝實現(xiàn)郵件發(fā)送功能

    在現(xiàn)代 Web 開發(fā)中,郵件發(fā)送功能是一個常見的需求,本文將介紹如何在 Go 語言中封裝一個通用的郵件發(fā)送包,支持驗證碼發(fā)送和通用郵件發(fā)送,需要的可以參考下
    2025-03-03
  • 對Golang中的FORM相關字段理解

    對Golang中的FORM相關字段理解

    這篇文章主要介紹了對Golang中的FORM相關字段理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

竹山县| 平武县| 纳雍县| 青冈县| 剑河县| 张家港市| 蚌埠市| 田阳县| 双牌县| 湖南省| 江川县| 景东| 龙南县| 通化市| 儋州市| 甘肃省| 泽库县| 长葛市| 通化市| 太康县| 郑州市| 东宁县| 三门峡市| 光泽县| 东乌珠穆沁旗| 锡林郭勒盟| 通城县| 余干县| 冕宁县| 山阴县| 敦煌市| 吴旗县| 清徐县| 冕宁县| 微山县| 宜兴市| 北流市| 肥乡县| 招远市| 怀安县| 图片|