/// <summary> /// 复制文件 /// </summary> /// <param name="origin">源文件夹的根目录</param> /// <param name="destination">目标文件夹的根目录</param> /// <param name="file_name">文件名</param> private void _Copy_File(string origin, string destination) { try { //文件数据 FileInfo ofi = new FileInfo(origin); FileInfo dfi = new FileInfo(destination); //构造文件复制的事件参数 File_Copy_Event_Arg e = new File_Copy_Event_Arg(); e.Current_Position = 0; e.File_Length = ofi.Length; e.Origin_File_Extension = ofi.Extension; e.Destination_File_Extension = dfi.Extension; e.Origin_File_Name = ofi.Name; e.Destination_File_Name = dfi.Name; e.Origin_Full_File_Name = ofi.FullName; e.Destination_Full_File_Name = dfi.FullName; if (File_Begin_Copy_Event != null) File_Begin_Copy_Event(e); //创建数据流 FileStream ofs = ofi.OpenRead(), dfs = dfi.Create(); byte[] buffer = new byte[STREAM_BUFFER_SIZE]; int nRead = 0; try { do { //复制文件内容 nRead = ofs.Read(buffer, 0, STREAM_BUFFER_SIZE); e.Current_Position += nRead; dfs.Write(buffer, 0, nRead); if (File_Copying_Event != null) File_Copying_Event(e); } while (nRead != 0); } finally { //关闭数据流 try { ofs.Close(); dfs.Close(); } catch (Exception) { } } //修改文件属性 -> 注意: 由于文件系统差异,部分属性修改后的误差会变大,所以对比文件时要有一个容差范围 dfi.CreationTime = new DateTime(((long)(ofi.CreationTime.Ticks / 10000000)) * 10000000); dfi.LastAccessTime = new DateTime(((long)(ofi.LastAccessTime.Ticks / 10000000)) * 10000000); dfi.LastWriteTime = new DateTime(((long)(ofi.LastWriteTime.Ticks / 10000000)) * 10000000); if (File_End_Copy_Event != null) File_End_Copy_Event(e); } catch (Exception) { throw; } }
/// <summary> /// 复制文件 /// </summary> /// <param name="origin">源文件夹的根目录</param> /// <param name="destination">目标文件夹的根目录</param> /// <param name="file_name">文件名</param> private void _Copy_File(string origin, string destination) { try { //文件数据 FileInfo ofi = new FileInfo(origin); FileInfo dfi = new FileInfo(destination); //构造文件复制的事件参数 File_Copy_Event_Arg e = new File_Copy_Event_Arg(); e.Current_Position = 0; e.File_Length = ofi.Length; e.Origin_File_Extension = ofi.Extension; e.Destination_File_Extension = dfi.Extension; e.Origin_File_Name = ofi.Name; e.Destination_File_Name = dfi.Name; e.Origin_Full_File_Name = ofi.FullName; e.Destination_Full_File_Name = dfi.FullName; if (File_Begin_Copy_Event != null) { File_Begin_Copy_Event(e); } //创建数据流 FileStream ofs = ofi.OpenRead(), dfs = dfi.Create(); byte[] buffer = new byte[STREAM_BUFFER_SIZE]; int nRead = 0; try { do { //复制文件内容 nRead = ofs.Read(buffer, 0, STREAM_BUFFER_SIZE); e.Current_Position += nRead; dfs.Write(buffer, 0, nRead); if (File_Copying_Event != null) { File_Copying_Event(e); } } while (nRead != 0); } finally { //关闭数据流 try { ofs.Close(); dfs.Close(); } catch (Exception) { } } //修改文件属性 -> 注意: 由于文件系统差异,部分属性修改后的误差会变大,所以对比文件时要有一个容差范围 dfi.CreationTime = new DateTime(((long)(ofi.CreationTime.Ticks / 10000000)) * 10000000); dfi.LastAccessTime = new DateTime(((long)(ofi.LastAccessTime.Ticks / 10000000)) * 10000000); dfi.LastWriteTime = new DateTime(((long)(ofi.LastWriteTime.Ticks / 10000000)) * 10000000); if (File_End_Copy_Event != null) { File_End_Copy_Event(e); } } catch (Exception) { throw; } }