我是靠谱客的博主 碧蓝飞机,最近开发中收集的这篇文章主要介绍文件迁移-复制粘贴文件到指定路径,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文件迁移

从A路径迁移到B路径,迁移所有文件夹 所有类型文件,每日执行定时任务,将每次新变化的文件迁移到文件夹且重命名


string hostname = Dns.GetHostName();//计算机名称
//Environment.UserName;//获取当前用户
try
{
using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Digtial_SCM"].ConnectionString))
{
string sql = @"SELECT
[CopyPath] ,[PastePath],isnull([Last_Run_Time],'19990909') [Last_Run_Time]
FROM [Digtial_SCM].[dbo].[SYS_File_Migration_Setting]
where [Host_Name]='" + hostname + @"'";
DataTable dt = new DataTable();
var q1 = sqlConnection.ExecuteReader(sql);
dt.Load(q1);
for (var i = 0; i < dt.Rows.Count; i++) {
var copyPath = dt.Rows[i]["CopyPath"].ToString();
var pastePath = dt.Rows[i]["PastePath"].ToString();
DateTime lastRunTime = DateTime.Parse(dt.Rows[0]["Last_Run_Time"].ToString());
List<FileInfo> lst = new List<FileInfo>();//所有的文件
List< FileInfo > files= GetFile(lst,copyPath, "", lastRunTime);
for (var x = 0; x < files.Count; x++) {
// CopyToFile(copyPath, pastePath, lastRunTime);
//目标整体路径
var targetField = pastePath + files[x].FullName.Substring(copyPath.Length, files[x].FullName.Length - copyPath.Length);//目标文件完整url
SetFile(files[x], targetField);
}
}
//if (File.Exists(copyPath))//必须判断要复制的文件是否存在
//
{
//
File.Copy(copyPath, pastePath, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换
//
}
}
}
catch (Exception ex)
{
}
}
public static void SetFile(FileInfo files,string targetField)
{
var sourceName = files.FullName;
//文件不用新的文件名,就用原文件文件名
string fileName = Path.GetFileName(sourceName);
可以选择给文件换个新名字
//string fileName = string.Format("{0}.{1}", "newFileText", "txt");
var targetPath = targetField.Replace(files.Name, "").TrimEnd('\');//目标文件路径
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
//
string targetPath = Path.Combine(pastePath, fileName);
FileInfo existedFile = new FileInfo(targetField);//要copy的文件
if (existedFile.Exists)//如果存在该文件 修改文件名称===Directory.Exists(targetPath)
{
targetField = Path.Combine(targetPath, fileName.Split('.')[0] + "_" + files.LastWriteTime.ToLongDateString().Replace("/", "") + "_" + files.LastWriteTime.ToLongTimeString().Replace(":", "") + "." + fileName.Split('.')[1]);
}
//Copy到新文件下
FileInfo file = new FileInfo(sourceName);//要copy的文件
if (file.Exists)
{
try
{
file.CopyTo(targetField, false);//复制粘贴
//true 覆盖已存在的同名文件,false不覆盖
using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Digtial_SCM"].ConnectionString))
{
string sql = @"
update [Digtial_SCM].[dbo].[SYS_File_Migration_Setting] set [Last_Run_Time]=GETDATE() where [Host_Name]='" + Dns.GetHostName() + @"'";
sqlConnection.ExecuteReader(sql);
}
}
catch (Exception ex)
{
}
}
}
/// <summary>
/// 获得目录下所有文件或指定文件类型文件(包含所有子文件夹)
/// </summary>
/// <param name="path">文件夹路径</param>
/// <param name="extName">扩展名可以多个 例如 .mp3.wma.rm</param>
/// <returns>List<FileInfo></returns>
public static List<FileInfo> GetFile(List<FileInfo> lst, string path, string extName, DateTime lastRunTime)
{
try
{
string[] dir = Directory.GetDirectories(path); //文件夹列表
DirectoryInfo fdir = new DirectoryInfo(path);
FileInfo[] file = fdir.GetFiles();
//FileInfo[] file = Directory.GetFiles(path); //文件列表
if (file.Length != 0 || dir.Length != 0) //当前目录文件或文件夹不为空
{
foreach (FileInfo f in file.Reverse()) //FileInfo f in file 显示当前目录所有文件
Reverse反转过来查找
{
//if (extName.ToLower().IndexOf(f.Extension.ToLower()) >= 0)
//{
if (DateTime.Parse(f.LastWriteTime.ToString()) > lastRunTime)// 文件夹内时间大于最后一次run程序时间的文件
{
lst.Add(f);
}
//}
}
foreach (string d in dir)
{
GetFile(lst, d, extName, lastRunTime);//递归
}
}
return lst;
}
catch (Exception ex)
{
throw ex;
}
}](这里写自定义目录标题)

最后

以上就是碧蓝飞机为你收集整理的文件迁移-复制粘贴文件到指定路径的全部内容,希望文章能够帮你解决文件迁移-复制粘贴文件到指定路径所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部