C#中的文件操作有必要这么复杂吗?

问题描述

今天看到一个用来进行文件复制的程序。如下。publicvoidCopyFile(stringFromFile,stringToFile,intsectSize){//建立文件,若文件存在则覆盖FileStreamfileToCreate=newFileStream(ToFile,FileMode.Create);fileToCreate.Close();fileToCreate.Dispose();//获得源文件和目的文件的文件流FileStreamfromFileStream=newFileStream(FromFile,FileMode.Open,FileAccess.Read);FileStreamtoFileStream=newFileStream(ToFile,FileMode.Append,FileAccess.Write);intFileSize;if(sectSize<fromFileStream.Length){byte[]buffer=newbyte[sectSize];intcopied=0;while(copied<=((int)fromFileStream.Length-sectSize)){FileSize=fromFileStream.Read(buffer,0,sectSize);fromFileStream.Flush();toFileStream.Write(buffer,0,sectSize);toFileStream.Flush();toFileStream.Position=fromFileStream.Position;copied+=FileSize;}intleft=(int)fromFileStream.Length-copied;FileSize=fromFileStream.Read(buffer,0,left);fromFileStream.Flush();toFileStream.Write(buffer,0,FileSize);toFileStream.Flush();}else{byte[]buffer=newbyte[(int)fromFileStream.Length];FileSize=fromFileStream.Read(buffer,0,(int)fromFileStream.Length);fromFileStream.Flush();toFileStream.Write(buffer,0,FileSize);toFileStream.Flush();}}

有两点我不是很理解:(1)为什么建立文件,要先建立之后然后关闭,然后再以Append的方式打开呢?似乎有更简单的方法吧?(2)while循环内的那些代码,也太繁琐的吧。我不太熟悉这些操作,在vs上实验了一下。实在是弄不懂为什么作者把代码写的这么“严谨”。难道如果不这样写的话,会有隐患吗?

解决方案

解决方案二:
用一个CopyFile就行??
解决方案三:
File.Copy(),这一个方法就行,在命名空间System.IO里
解决方案四:
stringOrignFile,NewFile;File.Copy(OrignFile,NewFile,true);FileStream复制大文件.即每次复制文件的一小段,以节省总内存开销
解决方案五:
真的没必要
解决方案六:
(1)为什么要先建立文件,然后关闭,然后再以Append的方式打开呢?直接在建立的文件流中写入不就可以了(2)while循环内的那些代码,每次都使用Flush和toFileStream.Position=fromFileStream.Position;我不太熟悉这些操作,在vs上实验了一下。实在是弄不懂为什么作者把代码写的这么“严谨”。难道如果不这样写的话,会有隐患吗?
解决方案七:
嗯我也在纠结这个问题,不过要复制大文件时用得着。若是比较小的文件就没必要那么复杂了
解决方案八:
先引入:Microsoft.VisualBasic这个最简单,在大文件也可以复制Microsoft.VisualBasic.Devices.ComputerMyComputer=newMicrosoft.VisualBasic.Devices.Computer();MyComputer.FileSystem.CopyFile("E:\Downloads\TheSorcererandtheWhiteSnake2011BluRayREMUX1080pAVCDTS-HDMA5.1DD5.1-CHD.ts","c:\TheSorcererandtheWhiteSnake2011BluRayREMUX1080pAVCDTS-HDMA5.1DD5.1-CHD.ts",Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing);
解决方案九:
这代码很懒,你觉得“严谨”也许是不知道到评判的标准。唯一可取的,就是他知道以一个sectSize大小的buffer来中介,而不是滥用无限的空间。除此以外这个代码有太多的bad味道。
解决方案十:
随便说一个我从来没有见过这么烂的地方,比如说假设buffer大小事32k,那么每一次Stream.Read都会返回32k,或者当处于最后一块区域时就可能小于32k的值返回FileSize变量中。不论这个变量中是多大的值,只要是>0就可以把buffer中前FileSize个字节写入目标文件,然后当读取到(例如最后一次必定FileSize==0)就跳出循环就行了。而这个程序计算什么copied,甚至跳出循环之后还要再计算、再读写,别人干净的4、5行程序被他写成十几行混乱的程序了。类似的地方还有不下3处。这应该是一个刚从学校毕业的纨绔子弟的作品。可能他的老师以为他花哨,但是其实花哨的东西就很危险。
解决方案十一:
这玩意没可读性,不科学。

时间: 2024-09-21 03:37:24

C#中的文件操作有必要这么复杂吗?的相关文章

Windows 8 Store Apps学习(24) Application Data和Package中的文件操作

文件系统: Application Data 中的文件操作, Package 中的文件操作 介绍 重新想象 Windows 8 Store Apps 之 文件系统 Application Data(应用程序数据存储) 中的文件操作 Application Data(应用程序数据存储) 中的"设置"操作 通过 uri 引用 Application Data(应用程序数据存储) 中的媒体(图片.视频或音频) 访问 Package 中的文件 访问可移动存储 示例 1.演示如何在 Applic

Lua中遍历文件操作代码实例

  这篇文章主要介绍了Lua中遍历文件操作代码实例,本文直接给出示例代码,需要的朋友可以参考下 写的一个关于遍历文件的程序段 记录一下咯 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 --[[检查所有.txt文件 比如A.txt中第一行规定有20列,但是在X行中多输入一个Tab,则输出:A表的X行填写不规范,行末有多余填写 ]]   getinfo = io.popen('dir .

Linux中RPM文件操作的常用命令总结_Linux

简介 众所周知在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的"添加/删除程序",但是功能又比"添加/删除程序"强很多,它就是Red Hat Package Manager(简称RPM).本文介绍的就是关于Linux中RPM文件操作的常用命令,下面话不多说,来一起看看吧. 一.RPM 安装操作 命令: rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rpm 包: rpm -iv e

重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作

原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载] 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 文件系统 Applicatio

让你提前认识软件开发(22):shell脚本中的文件操作

第1部分 重新认识C语言 shell脚本中的文件操作   [文章摘要]         编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令.        本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. [关键词]        shell  文件操作  读写  效率   一.概述         在

asp.net中Silverlight文件操作

提到Silverlight中的文件操作,第一个肯定是独立存储Isolated Store,这个东东相当于于一个本地的小型存储空间,通过它可以把一些不重要的数据(用户的一些配置信息或者文件) IsolatedStorageFile: 保存在客户端,由于这个空间是可以在本地查看得到,同时用户也可以随意的删除这些文件件以及文件,所以不要存放重要的信息. IsolatedStorageFile.GetUserStoreForApplication();得到基于当前用户和当前应用程序的IsolatedSt

android开发-安卓开发中的文件操作都有哪些?

问题描述 安卓开发中的文件操作都有哪些? 现在需要做的是一个文件和图片相关的软件,想要知道有哪些文件操作相关命令概括的比较全的文档或是代码实例,自己找的都有点偏 解决方案 http://www.cnblogs.com/devinzhang/archive/2012/01/19/2327597.html 解决方案二: iOS开发 文件操作android 开发中的文件操作android开发中的文件操作

使用技巧:对Java编程中的文件操作详解

编程|技巧|详解 一.获得控制台用户输入的信息 /** *//**获得控制台用户输入的信息 * @return * @throws IOException */ public String getInputMessage() throws IOException...{ System.out.println("请输入您的命令∶"); byte buffer[]=new byte[1024]; int count=System.in.read(buffer); char[] ch=new

PHP开发中关于文件操作的疑难问答

前言: PHP中对各类数据库的操作有着支持,对文件的操作也同样有着很丰富的操作方法,很多朋友现在的操作还是基于文件操作可是有的时候在操作文件的时候还存在不少的困惑和疑点,以下是我在日常编写过程中碰到的以及坛上朋友所碰到的关于文件操作的一些问题收藏吧. 问:如何新建一个文件? 答: 1.使用fopen(要建立的文件名,参数),参数可选w,w+,a,a+ 2.使用exec(echo '' > 要建立的文件名);这样是使用系统方式建立这个文件,你还可以使用touch这个linux命令来建立 问:为什么

PHP动态网站制作中关于文件操作的疑难问答

前言: PHP中对各类数据库的操作有着支持,对文件的操作也同样有着很丰富的操作方法,很多朋友现在的操作还是基于文件操作可是有的时候在操作文件的时候还存在不少的困惑和疑点,以下是我在日常编写过程中碰到的以及坛上朋友所碰到的关于文件操作的一些问题收藏吧. 问:如何新建一个文件? 答: 1.使用fopen(要建立的文件名,参数),参数可选w,w+,a,a+ 2.使用exec(echo '' > 要建立的文件名);这样是使用系统方式建立这个文件,你还可以使用touch这个linux命令来建立 问:为什么