尊重原创,转载请在文首注明出处:http://blog.youkuaiyun.com/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;