Ejemplo n.º 1
0
        /// <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;
            }
        }
Ejemplo n.º 2
0
        /// <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;
            }
        }