블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2804)
Unity3D (860)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (234)
협업 (61)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[링크] https://amiandappi.tistory.com/16

 

[C#][.NET framework] Directory.GetFiles() 로 여러 확장자 필터링 하기

지난번 포스팅에서 폴더 내 파일 목록을 가져오는 방법에 대해 공유 했다면 이번엔 복수개의 확장자로 필터링 하는 방법에 대해 포스팅 하려고 한다. var files = Directory.EnumerateFiles("C:\\path", "*.*", S

amiandappi.tistory.com

 

반응형
Posted by blueasa
, |

[수정] Rename 방식으로 변경(2024-07-04]

----

 

[빌드 시, Builtin AssetBundles에서 해당 Platform 에셋번들만 빌드 되도록 하기 위한 PreProcessor 추가]

기본적으로 에셋번들은 플랫폼 별로 모두 가지고 있는데 해당 플랫폼에 맞는 에셋번들만 빌드 되도록 하기 위해서

빌드 전(Preprocessor) 해당 안되는 AssetBundle을 Hidden 폴더(예:.Android or .iOS)로 Rename 했다가, 빌드 후(Postprocessor) 되돌려 놓음.

 

using System;
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using System.IO;
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
using UnityEditor.Callbacks;

namespace blueasa
{
    /// <summary>
    /// 빌드 시, Built-in AssetBundle에서 해당 Platform AssetBundle만 빌드 되도록 하기 위한 Preprocessor
    /// 빌드 전(Preprocessor) 해당 안되는 AssetBundle을 Hidden 폴더(예:.Android or .iOS)로 Rename 했다가, 빌드 후(Postprocessor) 되돌려 놓음
    /// [Hidden(./~) 참조] https://docs.unity3d.com/kr/2021.3/Manual/SpecialFolders.html
    /// </summary>
#if UNITY_2018_1_OR_NEWER
    public class BuildPreprocessor_BuiltinAssetBundle : IPreprocessBuildWithReport, IPostprocessBuildWithReport
#else
    public class BuildPreprocessor_BuiltinAssetBundle : IPreprocessBuild, IPostprocessBuild
#endif
    {
        private static readonly string m_strAndroid = "Android";
        private static readonly string m_strDotAndroid = ".Android";
        private static readonly string m_striOS = "iOS";
        private static readonly string m_strDotiOS = ".iOS";
        private static readonly string m_strDotMeta = ".meta";
        private static readonly string m_strAssetBundles = "AssetBundles";

        private static readonly string m_strDataPath = Application.dataPath;
        private static readonly string m_strStreamingAssetsPath = Application.streamingAssetsPath;
        
        private static readonly string m_strAssetBundlesPath_Builtin_FullPath = string.Format("{0}/{1}", m_strStreamingAssetsPath, m_strAssetBundles);
        private static readonly string m_strAssetBundlesPath_Builtin_Android_FullPath = string.Format("{0}/{1}", m_strAssetBundlesPath_Builtin_FullPath, m_strAndroid);
        private static readonly string m_strAssetBundlesPath_Builtin_DotAndroid_FullPath = string.Format("{0}/{1}", m_strAssetBundlesPath_Builtin_FullPath, m_strDotAndroid);
        private static readonly string m_strAssetBundlesPath_Builtin_iOS_FullPath = string.Format("{0}/{1}", m_strAssetBundlesPath_Builtin_FullPath, m_striOS);
        private static readonly string m_strAssetBundlesPath_Builtin_DotiOS_FullPath = string.Format("{0}/{1}", m_strAssetBundlesPath_Builtin_FullPath, m_strDotiOS);

        public int callbackOrder { get { return 0; } }

        private static void Refresh()
        {
            System.Threading.Thread.Sleep(100);
            AssetDatabase.Refresh();
            System.Threading.Thread.Sleep(100);
        }

#if UNITY_2018_1_OR_NEWER
        public void OnPreprocessBuild(BuildReport report)
#else
        public void OnPreprocessBuild(BuildTarget target, string path)
#endif
        {
            Debug.LogWarning($"[OnPreprocessBuild] {this}");

            // 빌드 전, 다른 플랫폼 AssetBundle 폴더 임시 제외
#if UNITY_ANDROID
            // [Rename]
            if (true == Directory.Exists(m_strAssetBundlesPath_Builtin_iOS_FullPath)
                && false == Directory.Exists(m_strAssetBundlesPath_Builtin_DotiOS_FullPath))
            {
                Debug.LogWarning("[OnPreprocessBuild] Rename 'iOS' Folder to '.iOS'");
                Directory.Move(m_strAssetBundlesPath_Builtin_iOS_FullPath, m_strAssetBundlesPath_Builtin_DotiOS_FullPath);
                // 빈(Empty) 폴더 생성을 방지하기 위해서 폴더의 meta 파일도 함께 삭제
                if (true == File.Exists(m_strAssetBundlesPath_Builtin_iOS_FullPath + m_strDotMeta))
                {
                    File.Delete(m_strAssetBundlesPath_Builtin_iOS_FullPath + m_strDotMeta);
                }
                Refresh();
            }
#elif UNITY_IOS
            // [Rename]
            if (true == Directory.Exists(m_strAssetBundlesPath_Builtin_Android_FullPath)
                && false == Directory.Exists(m_strAssetBundlesPath_Builtin_DotAndroid_FullPath))
            {
                Debug.LogWarning("[OnPreprocessBuild] Rename 'Android' Folder to '.Android'");
                Directory.Move(m_strAssetBundlesPath_Builtin_Android_FullPath, m_strAssetBundlesPath_Builtin_DotAndroid_FullPath);
                // 빈(Empty) 폴더 생성을 방지하기 위해서 폴더의 meta 파일도 함께 삭제
                if (true == File.Exists(m_strAssetBundlesPath_Builtin_Android_FullPath + m_strDotMeta))
                {
                    File.Delete(m_strAssetBundlesPath_Builtin_Android_FullPath + m_strDotMeta);
                }
                Refresh();
            }
#endif
            // Start listening for errors when build starts
            Application.logMessageReceived += OnBuildError;
        }

        // CALLED DURING BUILD TO CHECK FOR ERRORS
        private void OnBuildError(string condition, string stacktrace, LogType type)
        {
            Debug.LogWarning($"[OnBuildError] {condition} {stacktrace} {type}");

            if (type == LogType.Error)
            {
                // FAILED TO BUILD, STOP LISTENING FOR ERRORS
                Application.logMessageReceived -= OnBuildError;

                // 빌드 에러 시에도 이동된 파일 되돌리기
                RestoreTemporarilyMovedAssetbundles();
            }
        }

#if UNITY_2018_1_OR_NEWER
        public void OnPostprocessBuild(BuildReport report)
#else
        public void OnPostprocessBuild(BuildTarget target, string path)
#endif
        {
            Debug.LogWarning($"[OnPostprocessBuild] {this}");

            // [빌드 후] 제외 됐던 다른 플랫폼 AssetBundle 폴더 되돌리기
            RestoreTemporarilyMovedAssetbundles();

            // IF BUILD FINISHED AND SUCCEEDED, STOP LOOKING FOR ERRORS
            Application.logMessageReceived -= OnBuildError;
        }

        public static void RestoreTemporarilyMovedAssetbundles()
        {
            Debug.LogWarning($"[RestoreTemporarilyMovedAssetbundles]");

            // [빌드 후] 제외 됐던 다른 플랫폼 AssetBundle 폴더 되돌리기
#if UNITY_ANDROID
            // [Rename]
            if (true == Directory.Exists(m_strAssetBundlesPath_Builtin_DotiOS_FullPath)
                && false == Directory.Exists(m_strAssetBundlesPath_Builtin_iOS_FullPath))
            {
                Debug.LogWarning("[OnPreprocessBuild] Rename '.iOS' Folder to 'iOS'");
                Directory.Move(m_strAssetBundlesPath_Builtin_DotiOS_FullPath, m_strAssetBundlesPath_Builtin_iOS_FullPath);
                Refresh();
            }
#elif UNITY_IOS
            // [Rename]
            if (true == Directory.Exists(m_strAssetBundlesPath_Builtin_DotAndroid_FullPath)
                && false == Directory.Exists(m_strAssetBundlesPath_Builtin_Android_FullPath))
            {
                Debug.LogWarning("[OnPreprocessBuild] Rename '.Android' Folder to 'Android'");
                Directory.Move(m_strAssetBundlesPath_Builtin_DotAndroid_FullPath, m_strAssetBundlesPath_Builtin_Android_FullPath);
                Refresh();
            }
#endif
        }
    }
}

 

 

반응형
Posted by blueasa
, |

1. 파일과 디렉터리를 나타내는 클래스

 

 

  - 파일(File), 디렉터리(Directory) 관련 클래스들

    : FileSystemInfo _ 파일 시스템을 나타내는 기본 클래스

    : Directory, DirectoryInfo _ 디렉터리를 나타내는 기본 클래스

    : File, FileInfo _ 파일을 나타내는 기본 클래스

    : Path _ 경로를 조작하기 위한 기본 클래스

 

 

2. File 클래스

 

  - using System.IO;

 

  - File 클래스

    : public sealed class File

    : 파일 관련 함수 제공

    : 멤버 함수들이 public static으로 선언

    : 파일에 관련된 정보(파일의 존재여부, 파일의 생성시간, 최종 액세스시간, 최종 저장시간 등)을 알아낼 수 있다. 파일 삭제, 복사, 이동 등의 작업이 가능하다.

 

  - 파일 복사하기

    : File.Copy("FileTest.cs", "Output.txt", true);

 

  - 파일 존재 확인하기

    : bool exist = File.Exists("./Output.txt")

 

  - 파일 생성 시간 알아내기

    : DateTime dt = File.GetCreationTime("./Outout.txt");

 

 

3. File 클래스를 이용한 FileStream 생성

 

  - File 클래스의 역할 : FileStream의 객체 생성, 파일 관련 함수 제공

 

  - File을 이용해서 파일 스트림 생성

    : FileStrea fs = File.OpenRead("./herol.txt");

 

  - 문자 스트림 변환

    : StreamReader r = new StreamReader(fs, System.Text.Encoding.Default);

 

  - 커서의 위치를 첫부분에 위치시킨다.

    : r.BaseStreamSeek(0, SeekOrigin.Begin);

 

  - 데이터가 존재한다면 한줄 씩 읽어낸다.

    : while(r.Peek() > -1){

        Console.WriteLine(r.ReadLine());

      }

 

  - 스트리을 닫는다.

    : r.Close();

 

  - File 클래스의 함수들

    : AppendText() -> UTF-8로 인코딩된 텍스트를 추가하는 StreamWriter를 만든다.

    : Copy() -> 새 파일에 기존 파일을 복사

    : Create() -> 경로에 파일을 만든다.

    : CreateText() -> UTF-8로 인코딩된 텍스트를 쓰기 위해 새 파일을 만들거나 연다.

    : Delete() -> 파일을 삭제한다. 지정된 파일이 없어도 예외가 throw되지 않는다.

    : Exists() -> 파일이 있는지 여부를 확인

    : GetAttributes() -> 정규화된 경로에 있는 파일의 FileAttributes를 가져옴

    : GetCreationTime() -> 파일 또는 디렉터리의 만든 날자와 시간을 반환

    : GetLastAccessTime() -> 파일 또는 디렉터리를 마지막으로 액세스한 날짜와 시간을 반환

    : GetLastWriteTime() -> 파일 또는 디렉터리를 마지막으로 쓴 날짜와 시간을 반환

    : Move() -> 파일을 새 위치로 이동하고 파일의 이름을 새로 정할 수 있다.

    : Open() -> 지정된 경로에서 FileStream을 연다.

    : OpenRead() -> 읽기용으로 파일을 연다.

    : OpenText() -> UTF-8로 인코딩된 텍스트 파일을 읽기용으로 Open

    : OpenWrite() -> 쓰기용으로 기존 파일을 연다.

    : SetAttributes() -> 파일의 지정된 FileAttributes를 가져온다.

    : SetCreationTime() -> 파일이 만들어진 날짜와 시간을 설정

    : SetLastAccessTime() -> 파일을 마지막으로 액세스한 날짜와 시간을 설정

    : SetLastWriteTime() -> 파일에 마지막으로 쓴 날짜와 시간을 설정

 

 

4. Directory 클래스

 

  - 기능 : 디렉터리의 생성, 이동, 삭제 등의 기능을 이용할 수 있다.

 

  - Directory 클래스

    : public sealed class Directory

    : 디렉터리 생성 및 삭제

    : 디렉터리 관련 함수 제공

    : 멤버 함수들은 대부분 public static으로 선언되어 있다.

 

 

5. Path 클래스

 

  - Path 클래스

    : public sealed class Path

    : 파일이나 디렉터리의 경로의 확장 및 변경, 수정하는 클래스

    : 멤버들은 대부분 public static으로 선언되어 있다.


출처 : http://blog.naver.com/phoogu?Redirect=Log&logNo=110013802685

반응형
Posted by blueasa
, |