为LethalCompany模组编写DLL:实现可变配置文件下音频迁移
动态路径处理解决方案(LethalCompany模组音频复制)
核心思路
不用硬编码固定路径,而是通过当前模组DLL的运行路径反向推导,自动适配不同的profile目录。具体逻辑:
- 获取当前模组DLL的所在路径
- 从该路径回退到自身模组的音频目录(MySounds)
- 再从该位置回退到plugins根目录,定位到目标模组的音频目录(HisSounds)
修改后的完整代码
using System; using System.IO; using System.Reflection; namespace SoundsMove { class Program { static void Main(string[] args) { // 动态获取当前运行的模组DLL路径,适配任意profile string dllPath = Assembly.GetExecutingAssembly().Location; // 回退到DLL所在的MyMod目录 string myModDir = Path.GetDirectoryName(dllPath); // 拼接源音频目录:MyMod下的MySounds文件夹 string ModSource = Path.Combine(myModDir, "MySounds"); // 从MyMod目录回退两级,到达plugins根目录 string pluginsDir = Path.GetDirectoryName(Path.GetDirectoryName(myModDir)); // 拼接目标音频目录:plugins下的TheMod/HisSounds文件夹 string ModDest = Path.Combine(pluginsDir, "TheMod", "HisSounds"); // 确保目标目录存在,避免移动文件时出错 Directory.CreateDirectory(ModDest); // 获取源目录下的所有音频文件 var allFiles = Directory.GetFiles(ModSource); foreach (var file in allFiles) { // 安全拼接目标文件路径,避免手动拼接的格式错误 string destFilePath = Path.Combine(ModDest, Path.GetFileName(file)); // 移动文件(如需复制而非移动,替换为File.Copy(file, destFilePath, true),true表示覆盖已存在文件) File.Move(file, destFilePath); } } } }
关键代码说明
Assembly.GetExecutingAssembly().Location:拿到当前DLL的绝对路径,不管用户用的是Profile1还是Hide'N'Seek这类自定义profile,都能准确找到模组安装位置。Path.GetDirectoryName():每调用一次就回退到上一级目录,实现动态路径跳转。Path.Combine():自动处理不同系统的路径分隔符,避免手动拼字符串出现格式错误。Directory.CreateDirectory(ModDest):如果目标目录不存在,自动创建,防止文件操作失败。
内容的提问来源于stack exchange,提问作者user28063031
相关产品推荐
相关产品推荐

