1. 程式人生 > >UnityEditor下檔案操作方法彙總(Unity3D開發之二十四)

UnityEditor下檔案操作方法彙總(Unity3D開發之二十四)

最近經常需要些一個編譯工作指令碼,經常操作一個檔案。下面是一個彙總了的檔案操作方法。

using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
using System;
using System.IO;
using System.Threading;

public static class FileStaticAPI
{
    /// 檢測檔案是否存在Application.dataPath目錄
    public static bool IsFileExists (string fileName)
    {
        if (fileName.Equals (string
.Empty)) { return false; } return File.Exists (GetFullPath (fileName)); } /// 在Application.dataPath目錄下建立檔案 public static void CreateFile (string fileName) { if (!IsFileExists (fileName)) { CreateFolder (fileName.Substring (0, fileName.LastIndexOf ('/'
))); #if UNITY_4 || UNITY_5 FileStream stream = File.Create (GetFullPath (fileName)); stream.Close (); #else File.Create (GetFullPath (fileName)); #endif } } /// 寫入資料到對應檔案 public static void Write (string fileName, string contents) { CreateFolder (fileName.Substring (0
, fileName.LastIndexOf ('/'))); TextWriter tw = new StreamWriter (GetFullPath (fileName), false); tw.Write (contents); tw.Close (); AssetDatabase.Refresh (); } /// 從對應檔案讀取資料 public static string Read (string fileName) { #if !UNITY_WEBPLAYER if (IsFileExists (fileName)) { return File.ReadAllText (GetFullPath (fileName)); } else { return ""; } #endif #if UNITY_WEBPLAYER Debug.LogWarning("FileStaticAPI::CopyFolder is innored under wep player platfrom"); #endif } /// 複製檔案 public static void CopyFile (string srcFileName, string destFileName) { if (IsFileExists (srcFileName) && !srcFileName.Equals (destFileName)) { int index = destFileName.LastIndexOf ("/"); string filePath = string.Empty; if (index != -1) { filePath = destFileName.Substring (0, index); } if (!Directory.Exists (GetFullPath (filePath))) { Directory.CreateDirectory (GetFullPath (filePath)); } File.Copy (GetFullPath (srcFileName), GetFullPath (destFileName), true); AssetDatabase.Refresh (); } } /// 刪除檔案 public static void DeleteFile (string fileName) { if (IsFileExists (fileName)) { File.Delete (GetFullPath (fileName)); AssetDatabase.Refresh (); } } /// 檢測是否存在資料夾 public static bool IsFolderExists (string folderPath) { if (folderPath.Equals (string.Empty)) { return false; } return Directory.Exists (GetFullPath (folderPath)); } /// 建立資料夾 public static void CreateFolder (string folderPath) { if (!IsFolderExists (folderPath)) { Directory.CreateDirectory (GetFullPath (folderPath)); AssetDatabase.Refresh (); } } /// 複製資料夾 public static void CopyFolder (string srcFolderPath, string destFolderPath) { #if !UNITY_WEBPLAYER if (!IsFolderExists (srcFolderPath)) { return; } CreateFolder (destFolderPath); srcFolderPath = GetFullPath (srcFolderPath); destFolderPath = GetFullPath (destFolderPath); // 建立所有的對應目錄 foreach (string dirPath in Directory.GetDirectories(srcFolderPath, "*", SearchOption.AllDirectories)) { Directory.CreateDirectory (dirPath.Replace (srcFolderPath, destFolderPath)); } // 複製原資料夾下所有內容到目標資料夾,直接覆蓋 foreach (string newPath in Directory.GetFiles(srcFolderPath, "*.*", SearchOption.AllDirectories)) { File.Copy (newPath, newPath.Replace (srcFolderPath, destFolderPath), true); } AssetDatabase.Refresh (); #endif #if UNITY_WEBPLAYER Debug.LogWarning("FileStaticAPI::CopyFolder is innored under wep player platfrom"); #endif } /// 刪除資料夾 public static void DeleteFolder (string folderPath) { #if !UNITY_WEBPLAYER if (IsFolderExists (folderPath)) { Directory.Delete (GetFullPath (folderPath), true); AssetDatabase.Refresh (); } #endif #if UNITY_WEBPLAYER Debug.LogWarning("FileStaticAPI::DeleteFolder is innored under wep player platfrom"); #endif } /// 返回Application.dataPath下完整目錄 private static string GetFullPath (string srcName) { if (srcName.Equals (string.Empty)) { return Application.dataPath; } if (srcName [0].Equals ('/')) { srcName.Remove (0, 1); } return Application.dataPath + "/" + srcName; } /// 在Assets下建立目錄 public static void CreateAssetFolder (string assetFolderPath) { if (!IsFolderExists (assetFolderPath)) { int index = assetFolderPath.IndexOf ("/"); int offset = 0; string parentFolder = "Assets"; while (index != -1) { if (!Directory.Exists (GetFullPath (assetFolderPath.Substring (0, index)))) { string guid = AssetDatabase.CreateFolder (parentFolder, assetFolderPath.Substring (offset, index - offset)); // 將GUID(全域性唯一識別符號)轉換為對應的資源路徑。 AssetDatabase.GUIDToAssetPath (guid); } offset = index + 1; parentFolder = "Assets/" + assetFolderPath.Substring (0, offset - 1); index = assetFolderPath.IndexOf ("/", index + 1); } AssetDatabase.Refresh (); } } /// 複製Assets下內容 public static void CopyAsset (string srcAssetName, string destAssetName) { if (IsFileExists (srcAssetName) && !srcAssetName.Equals (destAssetName)) { int index = destAssetName.LastIndexOf ("/"); string filePath = string.Empty; if (index != -1) { filePath = destAssetName.Substring (0, index + 1); //Create asset folder if needed CreateAssetFolder (filePath); } AssetDatabase.CopyAsset (GetFullAssetPath (srcAssetName), GetFullAssetPath (destAssetName)); AssetDatabase.Refresh (); } } /// 刪除Assets下內容 public static void DeleteAsset (string assetName) { if (IsFileExists (assetName)) { AssetDatabase.DeleteAsset (GetFullAssetPath (assetName)); AssetDatabase.Refresh (); } } /// 獲取Assets下完整路徑 private static string GetFullAssetPath (string assetName) { if (assetName.Equals (string.Empty)) { return "Assets/"; } if (assetName [0].Equals ('/')) { assetName.Remove (0, 1); } return "Assets/" + assetName; } } #endif

需要的可以拿去用用。