`
insertyou
  • 浏览: 902011 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C#FileStream复制大文件

 
阅读更多
<p>即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: gray;">///</span><span style="color: green;"> </span><span style="color: gray;">&lt;summary&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: gray;">///</span><span style="color: green;"> </span></span><span style="">复制文件<span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: gray;">///</span><span style="color: green;"> </span><span style="color: gray;">&lt;/summary&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: gray;">///</span><span style="color: green;"> </span><span style="color: gray;">&lt;param name="fromFile"&gt;</span></span><span style="">要复制的文件</span><span style="" lang="EN-US">&lt;/param&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: gray;">///</span><span style="color: green;"> </span><span style="color: gray;">&lt;param name="toFile"&gt;</span></span><span style="">要保存的位置</span><span style="" lang="EN-US">&lt;/param&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: gray;">///</span><span style="color: green;"> </span><span style="color: gray;">&lt;param name="lengthEachTime"&gt;</span></span><span style="">每次复制的长度</span><span style="" lang="EN-US">&lt;/param&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">private</span> <span style="color: blue;">void</span> <span style="color: #010001;">CopyFile</span>(<span style="color: blue;">string</span> <span style="color: #010001;">fromFile</span>, <span style="color: blue;">string</span> <span style="color: #010001;">toFile</span>, <span style="color: blue;">int</span> <span style="color: #010001;">lengthEachTime</span>)</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #2b91af;">FileStream</span> <span style="color: #010001;">fileToCopy</span> = <span style="color: blue;">new</span> <span style="color: #2b91af;">FileStream</span>(<span style="color: #010001;">fromFile</span>, <span style="color: #2b91af;">FileMode</span>.<span style="color: #010001;">Open</span>, <span style="color: #2b91af;">FileAccess</span>.<span style="color: #010001;">Read</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #2b91af;">FileStream</span> <span style="color: #010001;">copyToFile</span> = <span style="color: blue;">new</span> <span style="color: #2b91af;">FileStream</span>(<span style="color: #010001;">toFile</span>, <span style="color: #2b91af;">FileMode</span>.<span style="color: #010001;">Append</span>, <span style="color: #2b91af;">FileAccess</span>.<span style="color: #010001;">Write</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">int</span> <span style="color: #010001;">lengthToCopy</span>;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">if</span> (<span style="color: #010001;">lengthEachTime</span> &lt; <span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Length</span>)<span style="color: green;">//</span></span><span style="">如果分段拷贝,即每次拷贝内容小于文件总长度<span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">byte</span>[] <span style="color: #010001;">buffer</span> = <span style="color: blue;">new</span> <span style="color: blue;">byte</span>[<span style="color: #010001;">lengthEachTime</span>];</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">int</span> <span style="color: #010001;">copied</span> = 0;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">while</span> (<span style="color: #010001;">copied</span> &lt;= ((<span style="color: blue;">int</span>)<span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Length</span> - <span style="color: #010001;">lengthEachTime</span>))<span style="color: green;">//</span></span><span style="">拷贝主体部分<span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">lengthToCopy</span> = <span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Read</span>(<span style="color: #010001;">buffer</span>, 0, <span style="color: #010001;">lengthEachTime</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Flush</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Write</span>(<span style="color: #010001;">buffer</span>, 0, <span style="color: #010001;">lengthEachTime</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Flush</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Position</span> = <span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Position</span>;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copied</span> += <span style="color: #010001;">lengthToCopy</span>;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">int</span> <span style="color: #010001;">left</span> = (<span style="color: blue;">int</span>)<span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Length</span> - <span style="color: #010001;">copied</span>;<span style="color: green;">//</span></span><span style="">拷贝剩余部分<span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">lengthToCopy</span> = <span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Read</span>(<span style="color: #010001;">buffer</span>, 0, <span style="color: #010001;">left</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Flush</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Write</span>(<span style="color: #010001;">buffer</span>, 0, <span style="color: #010001;">left</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Flush</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">else</span><span style="color: green;">//</span></span><span style="">如果整体拷贝,即每次拷贝内容大于文件总长度<span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>{</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: blue;">byte</span>[] <span style="color: #010001;">buffer</span> = <span style="color: blue;">new</span> <span style="color: blue;">byte</span>[<span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Length</span>];</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Read</span>(<span style="color: #010001;">buffer</span>,0,(<span style="color: blue;">int</span>)<span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Length</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Flush</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Write</span>(<span style="color: #010001;">buffer</span>, 0, (<span style="color: blue;">int</span>)<span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Length</span>);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Flush</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span>}</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">fileToCopy</span>.<span style="color: #010001;">Close</span>();</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="" lang="EN-US"><span style=""> </span><span style="color: #010001;">copyToFile</span>.<span style="color: #010001;">Close</span>();</span></p>
<p><span style="" lang="EN-US"><span style=""> </span>}</span></p>
分享到:
评论

相关推荐

    C# FileStream复制大文件

    本文实例为大家分享了C# FileStream复制大文件的具体代码,供大家参考,具体内容如下 即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。 /// /// 复制文件...

    C# FileStream复制大文件功能

    总结来说,C# FileStream复制大文件功能是一个复杂但非常有用的技术点。通过上述方法,我们可以在不浪费大量内存资源的情况下,有效地处理大文件的复制需求。在实际应用中,还需要根据具体的使用场景,适当调整每次...

    C# FileStream实现大文件复制

    参考文章:C# FileStream复制大文件。将该文章中提供的代码稍作修改,原文中进行了强制类型转换,如果文件很大,比如4G,就会出现溢出的情况,复制的结果字节丢失严重,导致复制文件和源文件大小不一样。这里修改的...

    C# winfrom 大文件复制

    在C# WinForm应用开发中,大文件复制是一项常见的任务,尤其在数据迁移、备份或者文件传输场景下。本文将详细讲解如何在C#中实现高效且稳定的WinForm大文件复制功能。 首先,理解基本的文件操作是至关重要的。C#...

    winform 文件操作 WM6.0 c# 遍历文件夹、复制文件、删除文件、复制文件内容

    复制文件内容通常涉及到读写操作,可以使用`FileStream`和`BinaryReader`/`BinaryWriter`来实现: ```csharp using System.IO; void CopyFileContent(string sourceFilePath, string destinationFilePath) { ...

    C#使用FileStream复制一个任意文件

    使用FileStream复制文件的优点是,它可以对文件进行逐一读取和写入,从而提高了文件复制的速度和效率。此外,FileStream还可以用于读取和写入大文件,避免了内存溢出的问题。 使用FileStream复制文件是一种高效、...

    C#自己自学的文件复制程序带进度条

    进度条的值可以通过计算已复制文件大小与总文件大小的比例来确定。 3. 多线程:为了不阻塞用户界面,文件复制操作通常在后台线程或异步任务中执行。使用System.Threading命名空间的ThreadPool或者Task类可以创建新...

    复制txt文件 c#

    3. **复制文件内容**:现在,我们可以通过读取源文件的字节并写入目标文件来实现复制。`BinaryReader`和`BinaryWriter`类可以帮助我们高效地进行字节读写: ```csharp using (BinaryReader reader = new ...

    C#复制文件夹(及文件夹下所有子文件夹和文件)

    这需要额外记录总的文件数量和已复制文件的数量。 ##### 3.2 具体实现 可以在`CopyDirectory`方法中增加计数器,并在复制每个文件后更新进度条。 ```csharp public static void CopyDirectory(string sourcePath,...

    C# 当在文件拷贝后,再接着后面操作 ,会提示文件被占用 ,导致后面的操作异常

    在C#编程中,文件操作是一项常见的任务,其中包括文件的复制。然而,有时在尝试进行文件复制后立即执行其他操作时,可能会遇到“文件被占用”的错误,这将导致后续操作异常。这个问题通常是由于文件复制过程尚未完全...

    C#文件复制程序代码

    通过创建`FileStream`对象,我们可以控制文件的读取和写入,从而实现中断复制。 3. **多线程**: - 在`System.Threading`命名空间中,`Thread`类允许我们创建和管理线程。在这个程序中,我们可能需要创建一个后台...

    c#读取二进制文件c#读取二进制文件

    - `File.Copy(string sourceFilePath, string destinationPath)`:复制文件。 - `File.Delete(string filePath)`:删除文件。 - `File.Exists(string filePath)`:检查文件是否存在。 以上方法为C#中处理文件的基本...

    c#读bin文件

    例如,可以使用`MemoryMappedFiles`来更高效地处理大文件,或者使用`Span&lt;T&gt;`来减少不必要的内存复制。但是,具体优化策略取决于原始代码的具体实现,这里没有提供具体的代码,所以无法进行针对性的优化。 在C#中,...

    C#中的文件复制操作

    C#的`System.IO`命名空间提供了`File`类,该类包含了多个静态方法用于文件操作,如`Copy`方法就是用来复制文件的。以下是一个简单的同步文件复制示例: ```csharp using System.IO; public void SyncCopy(string ...

    C#文件多线程复制代码

    在多线程复制文件时,如果无节制地创建线程,可能会导致系统资源过度消耗,甚至引起性能下降。因此,我们需要设定一个合理的最大线程数。这可以通过设置`ThreadPool.SetMaxThreads`来实现,同时配合`ThreadPool....

    c#上传大文件

    在C#中,上传大文件是一项常见的任务,特别是在开发Web应用程序时。无论是Windows Forms(WinForms)还是ASP.NET(ASPx)环境,都需要处理大文件的分块上传、进度显示和错误处理。以下是对这个主题的详细阐述: 1. ...

    多文件大文件复制源码

    本项目"多文件大文件复制源码"提供了一个使用C#编程语言实现的解决方案,专注于处理大文件以及多个文件的复制,并且在复制过程中加入了进度条显示和速度计算功能,提升了用户体验。 首先,我们来看C#中大文件复制的...

    C#文件复制

    - 当复制文件到移动硬盘或U盘时,只需确保目标设备已经正确连接,并提供正确的设备路径。例如,如果你的U盘在`E:`驱动器上,目标路径应为`E:\target\file.txt`。 - 注意权限问题,如果目标设备需要管理员权限才能...

Global site tag (gtag.js) - Google Analytics