国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity C# 使用IO流對(duì)文件的常用操作

這篇具有很好參考價(jià)值的文章主要介紹了Unity C# 使用IO流對(duì)文件的常用操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

IO流是C#語(yǔ)言中對(duì)文件操作常用的方式,但在Unity跨平臺(tái)開(kāi)發(fā)中需要注意有些平臺(tái)不支持IO,有些平臺(tái)的只讀文件不支持支持操作,例如安卓平臺(tái)的讀取StreamingAsset文件夾等。

大部分項(xiàng)目中都會(huì)有大量的對(duì)文件操作需求,因此我使用IO流整理編寫了一些常用的對(duì)文件操作方法,需要注意因?yàn)槭褂肐O流操作,因此不支持讀取遠(yuǎn)端文件,同時(shí)也不支持前面提及的某些平臺(tái)或者某些路徑中的文件操作不支持。

由于目前腳本中沒(méi)有使用Unity特有的類,所以下面腳本在,單純的C#項(xiàng)目中可以使用!

下面列舉下該腳本中提供的方法,以及完整腳本(目前就這么多,后續(xù)會(huì)不斷迭代更新,初步想法增加加載遠(yuǎn)端文件,以及加載一些不能用IO流加載的文件):

方法列表:

1、判斷文件或文件夾是否存在

2、判斷文件是否存在并且不為0字節(jié)

3、創(chuàng)建文件夾

4、刪除文件

5、導(dǎo)出文件(可以是文本文件,包含多個(gè)重載)

6、獲取設(shè)備所有盤符

7、獲取文件夾下所有文件夾路徑

8、獲取文件夾下所有文件路徑

9、獲取文件夾下指定類型文件路徑

10、獲取文件夾下除指定類型外的所有文件路徑

11、加載文件(可加載被其他進(jìn)程打開(kāi)的文件)

12、加載多個(gè)文件(可加載被其他進(jìn)程打開(kāi)的文件)

13、加載文本文件(可加載被其他進(jìn)程打開(kāi)的文件)

14、刪除文件夾下指定后綴的文件

15、刪除文件夾下除指定后綴的文件

16、刪除指定文件目錄下的所有文件

17、刪除指定文件夾(包括文件夾內(nèi)的子文件夾以及所有文件)

代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-707610.html

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


public static class FilesTool
{
    /// <summary>
    /// 文件操作緩存
    /// </summary>
    public static int bufferSize = 2048 * 2048;

    /// <summary>
    /// 判斷文件是否存在
    /// </summary>
    /// <param name="FilePath">文件路徑</param>
    /// <returns>返回bool,true為存在,false不存在</returns>
    public static bool IsHaveFile(string FilePath)
    {
        if (File.Exists(FilePath))
            return true;
        else
            return Directory.Exists(FilePath);
    }

    /// <summary>
    /// 判斷文件是否為0字節(jié)
    /// </summary>
    /// <param name="FilePath"></param>
    /// <returns></returns>
    public static bool IsFileHasData(string FilePath, Action<bool,FileDataInfo> completed = null)
    {
        try
        {
            var data = LoadFile(FilePath);
            completed?.Invoke(data.Data != null && data.Data.Length > 0, data);
            return data.Data!=null&&data.Data.Length > 0;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"代碼運(yùn)行錯(cuò)誤!Error={ex.StackTrace}");
            completed?.Invoke(false, null);
            return false;
        }
    }

    /// <summary>
    /// 創(chuàng)建文件
    /// </summary>
    /// <param name="FilePath">文件路徑</param>
    /// <param name="IfHaveFileIsCreate">當(dāng)文件存在時(shí)是否重新創(chuàng)建</param>
    /// <returns>返回bool,true為創(chuàng)建成功,false沒(méi)有創(chuàng)建</returns>
    public static bool CreateFile(string FilePath, bool IfHaveFileIsCreate = false)
    {
        if (!Directory.Exists(FilePath))
        {
            Directory.CreateDirectory(FilePath);
            return true;
        }
        else
        {
            if (IfHaveFileIsCreate)
            {
                Directory.CreateDirectory(FilePath);
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    /// <summary>
    /// 刪除指定文件
    /// </summary>
    /// <param name="FilePath">文件路徑</param>
    /// <returns>返回bool,true為刪除成功,false為刪除失敗</returns>
    public static bool DeleteFile(string FilePath)
    {
        if (Directory.Exists(FilePath))
        {
            File.Delete(FilePath);
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 導(dǎo)出文本文件
    /// </summary>
    /// <param name="fileContent">文件內(nèi)容</param>
    /// <param name="filePath">文件保存路徑</param>
    /// <param name="fileName">文件名以及后綴</param>
    /// <returns>返回bool,true導(dǎo)出成功,false導(dǎo)出失敗</returns>
    public static bool ExportFile(string content, string filePath, string fileName, FileMode fileMode = FileMode.Truncate)
    {
        try
        {
            CreateFile(filePath);
            var path = Path.Combine(filePath, fileName);
            fileMode = IsFileHasData(path) ? fileMode : FileMode.CreateNew;
            var fileAccess = fileMode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite;
            using (FileStream nFile = new FileStream(path, fileMode, fileAccess, FileShare.ReadWrite, bufferSize))
            {
                using (StreamWriter sWriter = new StreamWriter(nFile))
                {
                    //寫入數(shù)據(jù)
                    sWriter.Write(content);
                    return true;
                }
            }
        }
        catch (Exception ex)
        {
            Console.Write($"導(dǎo)出失敗:  {ex.StackTrace}");
            return false;
        }
    }

    /// <summary>
    /// 導(dǎo)出文本文件
    /// </summary>
    /// <param name="fileContent">文件內(nèi)容</param>
    /// <param name="fileFullPath">文件保存路徑</param>
    /// <returns>返回bool,true導(dǎo)出成功,false導(dǎo)出失敗</returns>
    public static bool ExportFile(string content, string fileFullPath, FileMode fileMode = FileMode.Truncate)
    {
        try
        {
            var filePath = Path.GetDirectoryName(fileFullPath);
            CreateFile(filePath);
            fileMode = IsFileHasData(fileFullPath) ? fileMode : FileMode.CreateNew;
            var fileAccess = fileMode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite;
            using (FileStream nFile = new FileStream(fileFullPath, fileMode, fileAccess, FileShare.ReadWrite, bufferSize))
            {
                using (StreamWriter sWriter = new StreamWriter(nFile))
                {
                    //寫入數(shù)據(jù)
                    sWriter.Write(content);
                    return true;
                }
            }
        }
        catch (Exception ex)
        {
            Console.Write($"導(dǎo)出失敗:  {ex.StackTrace}");
            return false;
        }
    }

    /// <summary>
    /// 導(dǎo)出文本文件
    /// </summary>
    /// <param name="fileContent">文件內(nèi)容</param>
    /// <param name="filePath">文件保存路徑</param>
    /// <param name="fileName">文件名以及后綴</param>
    /// <returns>返回bool,true導(dǎo)出成功,false導(dǎo)出失敗</returns>
    public static bool ExportFile(string content, Encoding encoding, string filePath, string fileName, FileMode fileMode = FileMode.Truncate)
    {
        try
        {
            CreateFile(filePath);
            var path = Path.Combine(filePath, fileName);
            fileMode = IsFileHasData(path) ? fileMode : FileMode.CreateNew;
            var fileAccess = fileMode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite;
            using (FileStream nFile = new FileStream(path, fileMode, fileAccess, FileShare.ReadWrite, bufferSize))
            {
                using (StreamWriter sWriter = new StreamWriter(nFile, encoding))
                {
                    //寫入數(shù)據(jù)
                    sWriter.Write(content);
                    return true;
                }
            }
        }
        catch (Exception ex)
        {
            Console.Write($"導(dǎo)出失敗:  {ex.StackTrace}");
            return false;
        }
    }

    /// <summary>
    /// 導(dǎo)出文本文件
    /// </summary>
    /// <param name="fileContent">文件內(nèi)容</param>
    /// <param name="encoding">內(nèi)容編碼</param>
    /// <param name="fileFullPath">文件保存路徑</param>
    /// <returns>返回bool,true導(dǎo)出成功,false導(dǎo)出失敗</returns>
    public static bool ExportFile(string content, Encoding encoding, string fileFullPath, FileMode fileMode = FileMode.Truncate)
    {
        try
        {
            var filePath = Path.GetDirectoryName(fileFullPath);
            CreateFile(filePath);
            fileMode = IsFileHasData(fileFullPath) ? fileMode : FileMode.CreateNew;
            var fileAccess = fileMode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite;
            using (FileStream nFile = new FileStream(fileFullPath, fileMode, fileAccess, FileShare.ReadWrite, bufferSize))
            {
                using (StreamWriter sWriter = new StreamWriter(nFile, encoding))
                {
                    //寫入數(shù)據(jù)
                    sWriter.Write(content);
                    return true;
                }
            }
        }
        catch (Exception ex)
        {
            Console.Write($"導(dǎo)出失敗:  {ex.StackTrace}");
            return false;
        }
    }

    /// <summary>
    /// 導(dǎo)出文件
    /// </summary>
    /// <param name="fileContent">文件內(nèi)容</param>
    /// <param name="filePath">文件保存路徑</param>
    /// <param name="fileName">文件名以及后綴</param>
    /// <param name="buffersiez">緩存區(qū)2048*2048=2m</param>
    /// <returns>返回bool,true導(dǎo)出成功,false導(dǎo)出失敗</returns>
    public static bool ExportFile(byte[] fileContent, string filePath, string fileName, FileMode fileMode = FileMode.Truncate)
    {
        try
        {
            CreateFile(filePath);
            var path = Path.Combine(filePath, fileName);
            fileMode = IsFileHasData(path) ? fileMode : FileMode.CreateNew;
            var fileAccess = fileMode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite;
            using (FileStream nFile = new FileStream(path, fileMode, fileAccess, FileShare.ReadWrite, bufferSize))
            {
                nFile.Write(fileContent, 0, fileContent.Length);
                return true;
            }
        }
        catch (Exception ex)
        {
            Console.Write($"導(dǎo)出失敗:  {ex.StackTrace}");
            return false;
        }
    }

    /// <summary>
    /// 導(dǎo)出文件
    /// </summary>
    /// <param name="fileContent">文件內(nèi)容</param>
    /// <param name="filePath">文件保存路徑</param>
    /// <param name="fileName">文件名以及后綴</param>
    /// <param name="buffersiez">緩存區(qū)2048*2048=2m</param>
    /// <returns>返回bool,true導(dǎo)出成功,false導(dǎo)出失敗</returns>
    public static bool ExportFile(byte[] fileContent, string fileFullPath, FileMode fileMode = FileMode.Truncate)
    {
        try
        {
            var filePath = Path.GetDirectoryName(fileFullPath);
            CreateFile(filePath);

            fileMode = IsFileHasData(fileFullPath) ? fileMode : FileMode.CreateNew;
            var fileAccess = fileMode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite;
            using (FileStream nFile = new FileStream(fileFullPath, fileMode, fileAccess, FileShare.ReadWrite, bufferSize))
            {
                nFile.Write(fileContent, 0, fileContent.Length);
                return true;
            }
        }
        catch (Exception ex)
        {
            Console.Write($"導(dǎo)出失敗:  {ex.StackTrace}");
            return false;
        }
    }
    
    /// <summary>
    /// 獲取當(dāng)前設(shè)備的盤符
    /// </summary>
    /// <returns></returns>
    public static List<string> GetDevicesPath()
    {
        var list = System.IO.Directory.GetLogicalDrives().ToList();
        return list;
    }

    /// <summary>
    /// 獲取文件夾內(nèi)所有文件夾路徑
    /// </summary>
    /// <param name="rootPath"></param>
    /// <param name="searchOption"></param>
    /// <returns></returns>
    public static List<string> GetFoldersPath(string rootPath, SearchOption searchOption = SearchOption.AllDirectories)
    {
        List<string> foldersPath = new List<string>();
        if (Directory.Exists(rootPath))
        {
            DirectoryInfo direction = new DirectoryInfo(rootPath);
            var folders = direction.GetDirectories("*", searchOption);
            foreach (var item in folders)
            {
                if (!foldersPath.Contains(item.FullName))
                    foldersPath.Add(item.FullName);
            }
        }

        return foldersPath;
    }

    /// <summary>
    /// 獲取文件夾下所有文件路徑
    /// </summary>
    /// <param name="fullPath">文件夾路徑</param>
    /// <returns>字符串鏈表</returns>
    public static List<string> GetFilesPath(string fullPath, SearchOption searchOption = SearchOption.AllDirectories)
    {
        List<string> filesPath = new List<string>();

        //獲取指定路徑下面的所有資源文件  然后進(jìn)行刪除
        if (Directory.Exists(fullPath))
        {
            DirectoryInfo direction = new DirectoryInfo(fullPath);
            FileInfo[] files = direction.GetFiles("*", searchOption);

            Console.Write(files.Length);

            for (int i = 0; i < files.Length; i++)
            {
                filesPath.Add(files[i].FullName);
            }
        }
        return filesPath;
    }

    /// <summary>
    /// 獲取文件夾下指定類型文件路徑
    /// </summary>
    /// <param name="fullPath">文件夾路徑</param>
    /// <param name="endswith">指定后綴的文件</param>
    /// <returns>字符串鏈表</returns>
    public static List<string> GetFilesPathEnd(string fullPath, List<string> endswith, SearchOption searchOption = SearchOption.AllDirectories)
    {
        List<string> filesPath = new List<string>();

        //獲取指定路徑下面的所有資源文件  然后進(jìn)行刪除
        if (Directory.Exists(fullPath))
        {
            DirectoryInfo direction = new DirectoryInfo(fullPath);
            FileInfo[] files = direction.GetFiles("*", searchOption);

            Console.Write(files.Length);

            var endSwith = new List<string>();
            endswith.ForEach(p => { var end = p.Replace(".", string.Empty); if (!endSwith.Contains(end)) endSwith.Add(end); });

            for (int i = 0; i < files.Length; i++)
            {
                if (endswith.Contains(files[i].Extension.Replace(".", string.Empty)))
                {
                    string FilePath = files[i].FullName;
                    filesPath.Add(FilePath);
                }
            }
        }
        return filesPath;
    }

    /// <summary>
    /// 獲取文件夾下除指定類型外的所有文件路徑
    /// </summary>
    /// <param name="fullPath">文件夾路徑</param>
    /// <param name="endswith">需要忽略的文件后綴</param>
    /// <returns>字符串鏈表</returns>
    public static List<string> GetFilesPathIgnoreEnd(string fullPath, List<string> IgnoreEndSwith, SearchOption searchOption = SearchOption.AllDirectories)
    {
        List<string> filesPath = new List<string>();

        //獲取指定路徑下面的所有資源文件  然后進(jìn)行刪除
        if (Directory.Exists(fullPath))
        {
            DirectoryInfo direction = new DirectoryInfo(fullPath);
            FileInfo[] files = direction.GetFiles("*", searchOption);

            Console.Write(files.Length);

            var endSwith = new List<string>();
            IgnoreEndSwith.ForEach(p => { var end = p.Replace(".", string.Empty); if (!endSwith.Contains(end)) endSwith.Add(end); });

            for (int i = 0; i < files.Length; i++)
            {
                if (!endSwith.Contains(files[i].Extension.Replace(".", string.Empty)))
                {
                    string FilePath = files[i].FullName;
                    filesPath.Add(FilePath);
                }
            }
        }
        return filesPath;
    }

    /// <summary>
    /// 加載文件(返回byte數(shù)組)
    /// </summary>
    /// <param name="filePath">文件路徑</param>
    /// <returns>返回byte數(shù)組</returns>
    public static FileDataInfo LoadFile(string filePath)
    {
        FileDataInfo fileData = new FileDataInfo();
        using (System.IO.FileStream fStream = new System.IO.FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, bufferSize))
        {
            byte[] fileBytes = new byte[fStream.Length];
            fStream.Read(fileBytes, 0, fileBytes.Length);
            fileData.Data = fileBytes;
            fileData.FileFullPath = filePath;
            return fileData;
        }
    }

    /// <summary>
    /// 加載多個(gè)文件(返回byte數(shù)組鏈表)
    /// </summary>
    /// <param name="filePath">文件路徑</param>
    /// <returns>返回byte數(shù)組鏈表</returns>
    public static List<FileDataInfo> LoadFiles(List<string> filesPath)
    {
        List<FileDataInfo> fileList = new List<FileDataInfo>();
        for (int i = 0; i < filesPath.Count; i++)
        {
            fileList.Add(LoadFile(filesPath[i]));
        }
        return fileList;
    }

    /// <summary>
    /// 讀取文件內(nèi)容(返回字符串)
    /// </summary>
    /// <param name="path"></param>
    /// <returns>返回讀取內(nèi)容,如果文件不存在返回empty</returns>
    public static FileDataInfo LoadFileContent(string path)
    {
        FileInfo file = new FileInfo(path);
        FileDataInfo content = new FileDataInfo();
        if (IsFileHasData(path))
        {
            Console.Write("未找到文件");
            return content;
        }
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, bufferSize))
        {
            using (StreamReader sr = new StreamReader(fs, Encoding.Default))
            {
                content.Content = sr.ReadToEnd();
                content.FileFullPath = path;
            }
        }
        return content;
    }

    /// <summary>
    /// 刪除文件夾下指定后綴的文件
    /// </summary>
    /// <param name="fullPath">文件路徑</param>
    /// <param name="endswith">需要?jiǎng)h除文件的后綴</param>
    /// <returns>返回bool,true刪除成功,false刪除失敗</returns>
    public static bool DeleteFileEnd(string fullPath, List<string> endswith, SearchOption searchOption=SearchOption.AllDirectories)
    {
        //獲取指定路徑下面的所有資源文件  然后進(jìn)行刪除
        if (Directory.Exists(fullPath))
        {
            DirectoryInfo direction = new DirectoryInfo(fullPath);
            FileInfo[] files = direction.GetFiles("*", searchOption);

            Console.Write(files.Length);

            var endSwith = new List<string>();
            endswith.ForEach(p => { var end = p.Replace(".", string.Empty); if (!endSwith.Contains(end)) endSwith.Add(end); });

            for (int i = 0; i < files.Length; i++)
            {
                if (endSwith.Contains(files[i].Extension.Replace(".", string.Empty)))
                {
                    string FilePath = fullPath + "/" + files[i].Name;
                    File.Delete(FilePath);
                }
            }
            return true;
        }
        return false;
    }

    /// <summary>
    /// 刪除文件夾下除指定后綴的文件
    /// </summary>
    /// <param name="fullPath">文件路徑</param>
    /// <param name="IgnoreEndswith">需要忽略的后綴</param>
    /// <returns>返回bool,true刪除成功,false刪除失敗</returns>
    public static bool DeleteFileIgnoreEnd(string fullPath, List<string> IgnoreEndswith, SearchOption searchOption = SearchOption.AllDirectories)
    {
        //獲取指定路徑下面的所有資源文件  然后進(jìn)行刪除
        if (Directory.Exists(fullPath))
        {
            DirectoryInfo direction = new DirectoryInfo(fullPath);
            FileInfo[] files = direction.GetFiles("*", searchOption);

            Console.Write(files.Length);

            var endSwith = new List<string>();
            IgnoreEndswith.ForEach(p => { var end = p.Replace(".", string.Empty); if (!endSwith.Contains(end)) endSwith.Add(end); });

            for (int i = 0; i < files.Length; i++)
            {
                if (endSwith.Contains(files[i].Extension.Replace(".", string.Empty)))
                {
                    continue;
                }
                string FilePath = fullPath + "/" + files[i].Name;
                File.Delete(FilePath);
            }
            return true;
        }
        return false;
    }

    /// <summary>
    /// 刪除指定文件目錄下的所有文件
    /// </summary>
    /// <param name="fullPath">文件路徑</param>
    /// <returns>返回bool,true刪除成功,false刪除失敗</returns>
    public static bool DeleteAllFile(string fullPath, SearchOption searchOption = SearchOption.AllDirectories)
    {
        //獲取指定路徑下面的所有資源文件  然后進(jìn)行刪除
        if (Directory.Exists(fullPath))
        {
            DirectoryInfo direction = new DirectoryInfo(fullPath);
            FileInfo[] files = direction.GetFiles("*", searchOption);

            Console.Write(files.Length);

            for (int i = 0; i < files.Length; i++)
            {
                string FilePath = fullPath + "/" + files[i].Name;
                File.Delete(FilePath);
            }
            return true;
        }
        return false;
    }

    /// <summary>
    /// 刪除文件夾(包括文件夾中所有的子文件夾和子文件)
    /// </summary>
    /// <param name="folderPath"></param>
    /// <param name="isDeleteRootFolder"></param>
    /// <returns></returns>
    public static bool DeleteFolder(string folderPath,bool isDeleteRootFolder=true)
    {
        if (Directory.Exists(folderPath))
        {
            var filesPath = GetFilesPath(folderPath);
            foreach (var file in filesPath)
            {
                File.Delete(file);
            }
            var foldersPath = GetFoldersPath(folderPath);
            foreach (var folder in foldersPath)
            {
                Directory.Delete(folder);
            }
            if (isDeleteRootFolder)
            {
                Directory.Delete(folderPath);
            }
        }
        return false;
    }
}


public class FileDataInfo
{
    /// <summary>完整的文件路徑(絕對(duì)路徑)</summary>
    public string FileFullPath=string.Empty;
    /// <summary>完整的文件名(包含文件后綴)</summary>
    public string FileFullName { get { return !string.IsNullOrEmpty(FileFullPath) ? Path.GetFileName(FileFullPath) : string.Empty; } }
    /// <summary>文件名(不包含文件后綴)</summary>
    public string FileName
    {
        get 
        {
            if (!string.IsNullOrEmpty(FileFullName))
            {
                var content= FileFullName.Split('.');
                if (content.Length > 1) { return content[0]; }

            }
            return string.Empty;
        }
    }
    /// <summary>文件后綴</summary>
    public string FileExtension
    {
        get 
        {
            if(!string.IsNullOrEmpty(FileFullName)) 
            {
                var content= FileFullName.Split('.');
                if (content.Length > 2) { return content[1]; }
            }
            return string.Empty;
        }
    }
    /// <summary>文件數(shù)據(jù)</summary>
    public byte[] Data=null;
    /// <summary>文件大小</summary>
    public ulong FileSize
    {
        get
        {
            return (ulong)(Data!=null? Data.Length : 0);
        }
    }
    /// <summary>如果是文本文件的文件內(nèi)容</summary>
    public string Content
    {
        get
        {
            if (Data != null && Data.Length > 0)
            {
                try
                {
                    return Encoding.Default.GetString(Data);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"代碼運(yùn)行錯(cuò)誤!Error={ex.StackTrace}");
                    return string.Empty; 
                }
            }
            return string.Empty;
        }
        set { Data = Encoding.Default.GetBytes(value);}
    }
    /// <summary>文件Base64內(nèi)容</summary>
    public string Base64String
    {
        get 
        {
            if (Data != null && Data.Length > 0)
            {
                try
                {
                    return Convert.ToBase64String(Data);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"代碼運(yùn)行錯(cuò)誤!Error={ex.StackTrace}");
                    return string.Empty; 
                }
            }
            return string.Empty;
        }
        set { Data = Convert.FromBase64String(value); }
    }
}

到了這里,關(guān)于Unity C# 使用IO流對(duì)文件的常用操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java IO:文件讀寫、流操作與常用技巧

    Java IO流指的是Java輸入輸出流,用于處理與文件、網(wǎng)絡(luò)等設(shè)備之間的數(shù)據(jù)傳輸。Java提供了 InputStream 和 OutputStream 兩個(gè)抽象類作為所有輸入輸出流類的基類,以及 Reader 和 Writer 兩個(gè)抽象類作為所有 字符 輸入輸出流類的基類。同時(shí),Java還提供了許多具體的輸入輸出流類和字符輸

    2024年02月04日
    瀏覽(26)
  • 初識(shí)Unity——?jiǎng)?chuàng)建代碼、場(chǎng)景以及五個(gè)常用面板(創(chuàng)建C#代碼、打開(kāi)代碼文件、場(chǎng)景的創(chuàng)建、Project、Hierarchy、Inspector、Scene、Game )

    初識(shí)Unity——?jiǎng)?chuàng)建代碼、場(chǎng)景以及五個(gè)常用面板(創(chuàng)建C#代碼、打開(kāi)代碼文件、場(chǎng)景的創(chuàng)建、Project、Hierarchy、Inspector、Scene、Game )

    目錄 創(chuàng)建代碼 創(chuàng)建C#腳本 打開(kāi)代碼文件 可能出現(xiàn)的問(wèn)題 場(chǎng)景 場(chǎng)景的創(chuàng)建 基本介紹 五個(gè)窗口面板的作用 Project Hierarchy Inspector Scene Game? 從unity2018版本開(kāi)始,unity就開(kāi)始不再維護(hù)和推薦JavaScript for Unity以及Boo等語(yǔ)言,現(xiàn)在官方主推和最常用的腳本語(yǔ)言是C#。 創(chuàng)建一個(gè)腳本之后

    2024年02月07日
    瀏覽(37)
  • 【C#】【System.IO】關(guān)于拷貝文件夾以及(Directory和DirectoryInfo、File和FileInfo)的區(qū)別

    本次問(wèn)題是想要拷貝文件夾,但是找了一圈發(fā)現(xiàn)只有File有Copy或者FileInfo的CopyTo,并沒(méi)有Directory的拷貝操作方法。 針對(duì)C#中拷貝文件夾的方法就是先生成一個(gè)目標(biāo)文件夾(destinationFolder)再將(soursefolder)中的文件依次拷貝到目標(biāo)文件夾中,C#并沒(méi)有提供封裝好的方法將文件夾

    2024年02月08日
    瀏覽(23)
  • 【Unity】腳本與組件操作 C#版

    【Unity】腳本與組件操作 C#版

    利用Unity創(chuàng)建C#腳本,可以將腳本作為作為組件掛載到游戲物體上,這樣腳本組件就會(huì)出現(xiàn)在檢視窗口,可以像其他內(nèi)置組件一樣方便修改。 在工程窗口的某個(gè)目錄中操作,右鍵Create-C# Script即可,要注意初始化命名, 文件名要與腳本中的類名保持一致 ,如果修改了腳本,類

    2024年02月04日
    瀏覽(20)
  • Unity Shader:常用的C#與shader交互的方法

    Unity Shader:常用的C#與shader交互的方法

    ? 俗話說(shuō)久病成醫(yī),雖然不是專業(yè)技術(shù)美術(shù),但代碼寫久了自然會(huì)積累一些常用的shader交互方法。零零散散的,總結(jié)如下: ? 有時(shí)候我們需要改變ui的一些屬性,從而實(shí)現(xiàn)想要的效果。通常UGUI上有如下屬性,而我們想要改變,就需要獲取到Material這個(gè)屬性: ? 這里拿Image來(lái)舉

    2024年02月14日
    瀏覽(23)
  • 【Linux操作系統(tǒng)】舉例解釋Linux系統(tǒng)編程中文件io常用的函數(shù)

    【Linux操作系統(tǒng)】舉例解釋Linux系統(tǒng)編程中文件io常用的函數(shù)

    在Linux系統(tǒng)編程中,文件IO操作是非常常見(jiàn)和重要的操作之一。通過(guò)文件IO操作,我們可以打開(kāi)、讀取、寫入和關(guān)閉文件,對(duì)文件進(jìn)行定位、復(fù)制、刪除和重命名等操作。本篇博客將介紹一些常用的文件IO操作函數(shù)。 1.1 原型、參數(shù)及返回值說(shuō)明 1.1.1 原型: open()函數(shù)是Linux系統(tǒng)

    2024年02月12日
    瀏覽(28)
  • 【Unity框架】XLua中Lua代碼注入C#代碼操作

    【Unity框架】XLua中Lua代碼注入C#代碼操作

    1.游戲框架下載地址:https://github.com/kof123w/gitWorkSpace/tree/main/XLua 2.XLua官方與教程地址:https://github.com/Tencent/xLua I.宏定義:添加 HOTFIX_ENABLE 到 Edit Project Settings Player Other Settings Scripting Define Symbols II.生成代碼:執(zhí)行 ‘XLua Generate Code’ 菜單,等待Unity編譯完成 III.注入:執(zhí)行 ‘XLua

    2024年02月08日
    瀏覽(21)
  • Unity C# 打開(kāi)windows對(duì)話框選擇文件夾或選擇文件

    unity沒(méi)有提供打開(kāi)windows對(duì)話框的api,在開(kāi)發(fā)種也會(huì)遇到選擇系統(tǒng)文件夾或選擇系統(tǒng)文件的需求

    2024年04月26日
    瀏覽(30)
  • Unity使用C# Protobuf源碼

    Unity使用C# Protobuf源碼

    目錄 第一步:下載源碼 第二步:運(yùn)行C#構(gòu)建文件 ?第三步:處理報(bào)錯(cuò)(如果你已安裝對(duì)應(yīng)的SDK則不會(huì)報(bào)錯(cuò)) 第四步:復(fù)制庫(kù)文件到你的工程 protobuf github源碼 https://github.com/protocolbuffers/protobuf 下載后解壓源碼,得到文件夾protobuf-main protobuf的源碼在protobuf-maincsharpsrc里,但不要

    2024年02月13日
    瀏覽(20)
  • 【Unity 3D】C#從JSON文件中讀取、解析、保存數(shù)據(jù)(附源碼)

    JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于編程語(yǔ)言的文本格式存儲(chǔ)和表示數(shù)據(jù),簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使JSON成為理想的數(shù)據(jù)交換語(yǔ)言,易于讀者閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效的提高網(wǎng)絡(luò)傳輸效率 生成JSON數(shù)據(jù)實(shí)例代碼如下 下面的代碼將JSON中數(shù)據(jù)

    2024年02月11日
    瀏覽(161)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包