C#复制文件

尊重原创,转载请在文首注明出处:http://blog.csdn.net/cai612781/article/details/79015286

开发Unity编辑器工具中经常遇到需要把文件复制到工程中,例如数据、图片等。

using System.Collections.Generic;
using System.IO;

namespace Assets.Editor
{
	class FileUtil
	{
		//比较两个文件夹,获得改动的文件
		public static FileInfo[] GetNeedCopyFiles(string srcPath, string desPath, bool forceCopy = false)
		{
			FileInfo[] files = {};
			List<FileInfo> fileInfoList = new List<FileInfo>();
			DirectoryInfo srcDirInfo = new DirectoryInfo(srcPath);
			DirectoryInfo desDirInfo = new DirectoryInfo(desPath);
			if(!srcDirInfo.Exists)
			{
				return files;
			}
			if(!desDirInfo.Exists)
			{
				Directory.CreateDirectory(desPath);
			}
			FileInfo[] fileArr = srcDirInfo.GetFiles();
			for(int i = 0, len = fileArr.Length; i < len; i++)
			{
				string filePath = desDirInfo.FullName + "\\" + fileArr[i].Name;
				FileInfo fileInfo = new FileInfo(filePath);
				if(!fileInfo.Exists)
				{
					fileInfoList.Add(fileArr[i]);
					continue;
				}
				if(forceCopy || fileArr[i].Length != fileInfo.Length)
				{
					fileInfoList.Add(fileArr[i]);
				}
			}
			files = fileInfoList.ToArray();
			return files;
		}
		
		//拷贝文件到目标路径
		public static void CopyFiles(ileInfo[] infos, string desPath)
		{
			string desFileName;
			FileInfo file;
			for(int i = 0, len = infos.Length; i < len; i++)
			{
				file = infos[i];
				desFileName = Path.Combine(desPath, file.Name);
				if(File.Exists(desFileName))
				{
					new FileInfo(desFileName).IsReadOnly = false;//注1
				}
				file.CopyTo(desFileName, true);
			}
		}
	}
}
注1:

当删除文件或者复制文件时选择覆盖,如果该文件是个只读文件,则会抛出异常:System.UnauthorizedAccessException。

解决方法是:

new FileInfo(filePath).IsReadOnly = false;

或者:

new FileInfo(filePath).Attributes = FileAttributes.Normal;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值