#519 递归搜索指定后缀集合的文件   module     snippets     UE4     遍历对象     2 years ago (owner) Document
// Fill out your copyright notice in the Description page of Project Settings.

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

namespace UnrealBuildTool.Rules
{
#if WITH_FORWARDED_MODULE_RULES_CTOR
    using zTargetInfo = ReadOnlyTargetRules;
#else
    using zTargetInfo = TargetInfo;
#endif

    public class HeXrTransceiverLib : ModuleRules
    {
        public HeXrTransceiverLib(zTargetInfo Target)
#if WITH_FORWARDED_MODULE_RULES_CTOR
            : base(Target)
#endif
        {
            Type = ModuleType.External;

            PublicIncludePaths.AddRange(
                    new string[] {
                        // ... add public include paths required here ...
                        Path.Combine(ModuleDirectory, "include"),
                    }
                );

            // Add the import library
            //PublicLibraryPaths.Add(Path.Combine(ModuleDirectory, "lib"));
            PublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, "lib", "HeXrTransceiver.lib"));

            // Delay-load the DLL, so we can load it from the right place first
            PublicDelayLoadDLLs.Add("HeXrTransceiver.dll");

            string dll_folder_path = Path.Combine(ModuleDirectory, "dll");
            string[] dlls_fullpath = DFS_GetFilesRecursively(dll_folder_path, new string[] { ".dll" });
            // Runtime Dependencies for Project Package
            foreach(string dll in dlls_fullpath)
	    {
                 string target_output_path = "$(TargetOutputDir)/dll".Replace("dll", Path.GetFileName(dll));
                 RuntimeDependencies.Add(target_output_path, dll); // copy
                 // PublicDelayLoadDLLs.Add(Path.GetFileName(dll));
		 RuntimeDependencies.Add(target_output_path, StagedFileType.NonUFS);
	    }
        }

        /*
         * Root: folder full path
         * FileExts: dll,jpg,txt,etc.
         * Return full path of files.
         */
        public string[] DFS_GetFilesRecursively(string Root, string[] FileExts)
        {
            List<string> Ret = new List<string>();

            DirectoryInfo DI = new DirectoryInfo(Root);
            foreach(FileInfo FI in DI.GetFiles())
            {
                //System.Console.WriteLine("FI.Extension={0} FI.FullName={1}", FI.Extension, FI.FullName);
                foreach(string Ext in FileExts)
                {
                    if (Ext.Equals(FI.Extension, System.StringComparison.OrdinalIgnoreCase))
                    {
                        Ret.Add(FI.FullName);
                        break;
                    }
                }
            }

            foreach(DirectoryInfo SubDI in DI.GetDirectories())
            {
                Ret.AddRange(DFS_GetFilesRecursively(SubDI.FullName, FileExts));
            }

            return Ret.ToArray();
        }

        /**
         * Root: folder full path
         * FileExts: dll,jpg,txt,etc.
         * Return full path of files.
         */
        public string[] GetFiles_NoRecur(string Root, string[] FileExts)
        {
            List<string> Ret = new List<string>();
    
            DirectoryInfo DI = new DirectoryInfo(Root);
            foreach (FileInfo FI in DI.GetFiles())
            {
                //System.Console.WriteLine("FI.Extension={0} FI.FullName={1}", FI.Extension, FI.FullName);
                foreach (string Ext in FileExts)
                {
                    if (Ext.Equals(FI.Extension, System.StringComparison.OrdinalIgnoreCase))
                    {
                        Ret.Add(FI.FullName);
                        break;
                    }
                }
            }
    
            return Ret.ToArray();
        }
    }
}