Golang中有哪些复制文件的方法-创新互联

Golang中有哪些复制文件的方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联建站于2013年创立,是专业互联网技术服务公司,拥有项目成都网站设计、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元合水做网站,已为上家服务,为合水各地企业和个人服务,联系电话:028-86922220

方法1:使用io.Copy()

该实用程序的第一个版本将使用io.Copy()标准GO库的功能。实现中可以找到实用程序的逻辑。copy()职能如下:

Golang中有哪些复制文件的方法

除了测试要复制的文件是否存在外(os.Stat(src)),并且是一个常规文件(sourceFileStat.Mode().IsRegular())这样您就可以打开它阅读,所有的工作都是由io.Copy(destination, source)声明。这,这个,那,那个io.Copy()函数返回复制的字节数和复制过程中发生的第一条错误消息。在Go中,如果没有错误消息,则错误变量的值将为nil.

您可以了解更多关于io.Copy()在IO封装文件页。

执行cp1.go将生成下一种输出:

$ run cp1
Please provide two command line arguments
$ run cp1 fileCPtxt tmpfileCPCOPY
Copied bytes
$ diff fileCPtxt tmpfileCPCOPY

这种技术尽可能简单,但不给开发人员带来灵活性,这并不总是一件坏事。但是,有时开发人员需要或希望决定如何读取文件。

方法2:使用ioutil.WriteFile()和ioutil.ReadFile()

复制文件的第二种方法是使用ioutil.ReadFile()和ioutil.WriteFile()职能。第一个函数将整个文件的内容读入字节片,第二个函数将字节片的内容写入文件中。
实用程序的逻辑可以在以下GO代码中找到:

Golang中有哪些复制文件的方法

除了这两个if块,它们是工作方式的一部分,您可以看到程序的功能在ioutil.ReadFile()和ioutil.WriteFile()陈述。

执行cp2.go将生成下一种输出:

$ run cp2
Please provide two command line arguments
$ run cp2 fileCPtxt tmpcopyFileCP
$ diff fileCPtxt tmpcopyFileCP

请注意,尽管此技术将复制一个文件,但是当您想要复制大型文件时,它可能并不有效,因为ioutil.ReadFile()也将是巨大的。

方法3:使用os.Read()和os.Write()

在GO中复制文件的第三种方法是使用cp3.go将在本节中开发的实用程序。它接受三个参数:输入文件的文件名、输出文件的文件名和缓冲区的大小。

最重要的部分cp3.go驻留在以下for循环,可以在copy() function:

Golang中有哪些复制文件的方法

这种技术使用os.Read()用于将输入文件的一小部分读入名为buf和os.Write()将缓冲区的内容写入文件。当读取错误或到达文件末尾时,复制过程停止(io.EOF).

执行cp3.go将生成下一种输出:

$ run cp3
usage cp3 source destination BUFFERSIZE
$ run cp3 fileCPtxt tmpbuf10 
Copying fileCPtxt to tmpbuf10
$ run cp3 fileCPtxt tmpbuf20 
Copying fileCPtxt to tmpbuf20

如您所见,缓冲区的大小极大地影响了cp3.go.

做一些基准

本文的最后一部分将尝试比较这三个程序以及cp3.go对于不同的缓冲区大小,请使用time(1)命令行实用程序。

下面的输出显示了cp1.go, cp2.go,和cp3.go复制500 MB文件时:

Golang中有哪些复制文件的方法

输出结果表明,这三个实用程序的性能非常相似,这意味着标准GO库的功能非常聪明和优化。

现在,让我们测试缓冲区大小如何影响cp3.go。执行cp3.go如果缓冲区大小为10、20和1,000字节,以便在相当快的计算机上复制500MB文件,生成的输出显示,缓冲区越大,cp3.go实用程序,这或多或少是预期的。此外,使用小于20个字节的缓冲区大小复制大文件是一个非常缓慢的过程,应该避免。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联成都网站设计公司行业资讯频道,感谢您对创新互联成都网站设计公司的支持。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、网站设计器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:Golang中有哪些复制文件的方法-创新互联
链接地址:http://abwzjs.com/article/cddhii.html