Unity读取配置文件
config.ini存放在Assets目录下,项目打包之后存放在Data目录下exe同目录
// 从配置文件读取 string configFile = Application.dataPath + "/config.ini";//打包好的“xxx_Data”目录貌似没有读取里面的文件权限 //所以对于打包的程序,需要把配置文件config.ini放在exe同目录下 #if !UNITY_EDITOR configFile = System.Environment.CurrentDirectory + "/config.ini"; #endif if (File.Exists(configFile)) { ConfigIni ini = new ConfigIni(configFile); //host = ini.ReadIniContent("DeepStreamServer", "host"); //port = ini.ReadIniContent("DeepStreamServer", "port"); host = ini.keyVal["host"]; port = ini.keyVal["port"]; //MessageBox(IntPtr.Zero, configFile+","+host+","+port, "从配置文件读取DeepStream的IP:Port", 0); }
using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Text; using UnityEngine; /// <summary> /// 读取ini配置文件 /// [Time] /// time=10 /// [Speed] /// speed=5 /// ConfigIni ini=new ConfigIni(Application.StreamingAssets+"/Setting.ini"); /// time=ini.ReadIniContent("Time","time"); /// speed=ini.ReadIniContent("Speed","speed"); /// ini.WritePrivateProfileString("Count","count","5"); /// </summary> public class ConfigIni { public string path; public Dictionary<string, string> keyVal = new Dictionary<string, string>(); //ini文件的路径 public ConfigIni(string path) { this.path = path; StreamReader sr = new StreamReader(path, Encoding.Default); string line; while ((line = sr.ReadLine()) != null) { if (line.Contains("=")) { string[] kv = line.Split('='); string key = kv[0].Trim(); string v = kv[1].Trim(); keyVal.Add(key, v); } } } [DllImport("kernel32")] public static extern long WritePrivateProfileString(string section, string key, string value, string path); [DllImport("kernel32")] public static extern int GetPrivateProfileString(string section, string key, string deval, StringBuilder stringBuilder, int size, string path); [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)] public static extern int MessageBox(IntPtr handle, String message, String title, int type); //写入ini文件 public void WriteIniContent(string section, string key, string value) { WritePrivateProfileString(section, key, value, this.path); } //读取Ini文件 public string ReadIniContent(string section, string key) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(section, key, "", temp, 255, this.path); //MessageBox(IntPtr.Zero, this.path+i + ","+temp+","+section+key, "ReadIniContent", 0); return temp.ToString(); } //判断路径是否正确 public bool IsIniPath() { return File.Exists(this.path); } }