引用“kernel32”读写ini配置文件

unity ini kernel32 配置文件 

引用“kernel32”读写ini配置文件

OverView

kernel32.dll是Windows中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。

standardshader与toonshader比较:

![standardshader][1]![toonshader][2]

注意事项:

  • ini文件路径必须完整
  • ini文件路径必须使用\,因为VC++中,\\才表示\
  • 可将ini放在程序所在目录,此时IpFileName参数为“.\FileName.ini”

GetPrivateProfileInt

使用该方法可获取ini类型数据,未获取到时则会取设置的默认数据

UINT WINAPI GetPrivateProfileInt
(
_In_LPCTSTR lpAppName, //ini文件中区块名称
_In_LPCTSTR lpKeyName, //键名
_In_INT nDefault, //默认值
_In_LPCTSTR lpFileName //ini文件路径
);

GetPrivateProfileString

使用该方法可获取string类型数据,未获取到时则会取设置的默认数据

UINT WINAPI GetPrivateProfileString
(
_In_LPCTSTR lpAppName, //ini文件中区块名称
_In_LPCTSTR lpKeyName, //键名
_In_INT nDefault, //默认值
_In_LPSTR lpReturnedString,//接受ini文件中值的CString对象,指定一个字符串缓冲区,长度至少为nSize
_In_DWORD nSize,//指定装载到IpReturnedString缓冲区的最大字符数
_In_LPCTSTR lpFileName //ini文件路径
);

向ini中写值,所以仅有写入string就足够了

WritePrivateProfileString

BOOL WritePrivateProfileString(
LPCTSTR lpAppName,//ini文件中区块名
LPCTSTR lpKeyName,//键名
LPCTSTR lpString,//键值
LPCTSTR lpFileName
);

unity中简单使用

Singleton 是一个简单的单例模式实现,这里不过多关注

通过单例的方式,将下面脚本挂在场景中,便可以在其他脚本中通过ConfigUtity.Instance.方法() ,直接使用。需要注意的这里将ini文件的路径直接放在了Unity StreamingAssets目录下,这样程序发布后就可以直接修改ini来改变配置了

使用示例:

FrontColor.r = ConfigUtilty.Instance.GetProfileInt("FitColor", "FColorR", 0, "MainConfig.ini");

FOffset = float.Parse(ConfigUtilty.Instance.GetProfileString("FitColor", "GFOffset", "0.01", 5, "MainConfig.ini"));

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;

/// <summary>
/// ws:配置文件读写类,这就很nice。配置文件必须放在StreamingAssets文件夹下
/// </summary>
public class ConfigUtilty : Singleton<ConfigUtilty> {

    // StringBuilder temp = new StringBuilder(1024);
    //int i = GetPrivateProfileString("system", "StrServeIP", "", temp, 500, g_ConfigIniFile);
    //SetProfileString("Flag","Flag","10","MainConfig.ini");

    //系统动态库
    [DllImport("kernel32")]
    private static extern void WritePrivateProfileString(string section, string key, string def,string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileInt(string section, string key, int def, string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

     private string ConfigPath;//配置文件所在位置
     private StringBuilder retVal;
     void Awake()
     {
         ConfigPath = Application.streamingAssetsPath;
         retVal = new StringBuilder();

    }

    public void SetProfileString(string section,string key,string def,string filename)
    {
        WritePrivateProfileString(section,key,def,ConfigPath+"\\"+filename);
    }

    public int GetProfileInt(string section,string key,int def,string filename)
    {
        return GetPrivateProfileInt(section, key, def, this.ConfigPath+"\\"+filename);
    }

    public string GetProfileString(string section,string key,string def,int size,string filename)
    {
        int i=GetPrivateProfileString(section, key,def,retVal,size,ConfigPath + "\\" + filename);
        return i == 0 ? "" : retVal.ToString();
    }

}

使用INIParser读写

在unity中使用INI文件的过程中,发现了assetstore上一个特别好用的INI读写插件——INIParser

直接在assetstore上搜索安装即可

<转自>http://blog.csdn.net/u010019717

Ini files

这个库可处理ini文件。 请注意,该文件可以是任何扩展名(如.txt)只要 文件内容是正确格式。

[Player]
name=Arnold
avatar=2
; This section stored hi-scores
[Hi-score]
Top1=32900
Top2=12000
Top3=4700

那怎么使用这个库呢?

  1. 添加 “INIParser.cs” 到 Unity.
  2. 声明一个 INIParser 对象并使用它.
INIParser ini = new INIParser();
ini.Open(“C:/Test.ini”);
ini.WriteValue(“Player”,“Name”,“Arnold”);
ini.Close();
多个Ini文件时
    请注意,对于每个INIParser实例,你在任何一个时间只能有一个open的ini文件,你可以打开下一个ini文件,但是之前您必须使用Close()。

INIParser ini = new INIParser();
ini.Open(“C:/Test.ini”);
ini.WriteValue(“Player”,“Name”,“Arnold”);
ini.WriteValue(“Hi-score”,“Top3”,1000);
ini.Close();
ini.Open(“C:/Test2.ini”);
ini.WriteValue(“Position”,“x”,2);
ini.WriteValue(“Position”,“y”,3);
ini.Close();

Methods方法

Open(string path)

Open ini_file关于 reading 和 writing. 如果这个文件不存在将被创建。. 一旦你完成了reading/writing 记得调用函数 Close( )。来保存这个ini文件的所有改变。

Open(TextAsset asset)

Open 一个 TextAsset 作为 ini_file. 如果做了任何更改,则副本将保存在Persistent Data Path持久性数据的路径下。这个函数会一直看着Persistent Data Path持久数据路径,如果有任何修改的TextAsset的副本,实际上看游戏中的文本资源包之前首先看到在Persistent Data Path持久数据路径的变化。

OpenFromString(string str)

从字符串创建ini文件和打开它用于进行读/写。正确格式化的字符串作为ini文件(即:sections部分,keys键和values值) 否则将无法正确创建ini文件。注意,这个ini文件是暂时的,只存在于内存中。但是你可以使用ToString()返回的字符串可以被保存到服务器或磁盘的完整的ini文件。

string ToString(string str)

返回完整的 ini file 字符串。

Close()

一旦你完成读取或写入任何打开的ini文件,应调用此方法。ini文件数据存储在内存中,直到调用此方法,这一数据被写入到磁盘。

string ReadValue(string section, string key, string default)

(重载: bool, int, long, double, byte[], DateTime)

从ini_file中读取值。 如果值不存在,(默认值)将被返回。

WriteValue(string section, string key, string value)

(overload: bool, int, long, double, byte[], DateTime)

写入 一个值到 ini_file

SectionDelete(string section)

删除整个ini文件的section部分,这也将删除与之关联的所有键/值对。

bool IsSectionExists(string section)

检查是否存在ini文件中的section 节。您不需要检查,以防止错误,因为如果你ReadValue从一个不存在的section 节,ReadValue将只返回默认值。然而,有时它可以是有用的如果ini文件已保存的具体数据。

KeyDelete(string section, string key)

删除被选择的 key (还有和它相关的 value) 从 ini file.中

bool IsKeyExists(string section, string key)

检查以查看是否有指定的键存在于ini文件。您不需要检查,以防止错误,因为如果你ReadValue一个不存在的节,ReadValue将只返回默认值。然而,有时它可以是有用的如果ini文件已保存的具体数据。

Open(TextAsset asset)

TextAsset 是read-only, 所以任何的修改是放在sandbox area 沙箱区域(persistentDataPath).

Example code:

INIParser ini = new INIParser();
TextAsset asset = Resource.Load("TextAssetExample") as TextAsset;
ini.Open(asset);
ini.WriteValue("Player","Name","Arnold");
ini.Close();

有时候,你会想使用TextAsset文本资源作为ini文件。游戏包中包含TextAsset文本资源,因此它在每个平台上的读/写操作可靠。如果你使用streaming assets流的资产作为ini文件,有时你会达到以读/写权限错误移动平台上。

你必须确保该TextAsset文本资源存在,否则任何读/写操作将不会正确工作。

Credits

library 是由STA INIFile改编而成,仿照游戏制作室INI文件系统。

Example code:

Save 和 load game data

INIParser ini = new INIParser();
// Open the save file. If the save file does not exist, INIParser automatically create
// one
ini.Open(Application.persistentDataPath + "save.txt");
// Read the score. If the section/key does not exist, default score to 10
int score = ini.ReadValue("Player","Score",10);
score += 100;
ini.WriteValue("Player","Score",score);
ini.Close();

在这场比赛第一次运行时,会发生什么?

这段代码从保存文件读取比分,增加100,并保存新的得分值。

Open()将检测到“save.txt”不存在,所以空白“save.txt”将被创建。 然后,分数将被读取。自从“save.txt”是空白的,分数不能在ini文件中找到,所以它默认为10。然后,新的分数的值写入ini文件。

Save 和 load game data 从 TextAsset文件中

INIParser ini = new INIParser();
TextAsset asset = Resource.Load("TextAssetExample") as TextAsset;
ini.Open(asset);
int score = ini.ReadValue("Player","Score",10);
score += 100;
ini.WriteValue("Player","Score",score);
ini.Close();

有时候,你会想使用TextAsset文本资源作为ini文件。游戏包中包含TextAsset文本资源,因此它在每个平台上的读/写操作可靠。如果你使用streaming assets流的资产作为ini文件,有时你会达到以读/写权限错误移动平台上。

你必须确保该TextAsset文本资源存在,否则任何读/写操作将不会正确工作。

引用“kernel32”读写ini配置文件的更多相关文章

  1. C# 读写 ini 配置文件

    虽说 XML 文件越发流行,但精简的 ini 配置文件还是经常会用到,在此留个脚印. 当然,文中只是调用系统API,不会报错,如有必要,也可以直接以流形式读取 ini文件并解析. /// <su ...

  2. [转]VB 读写ini 配置文件

    转自 百度知道 C# 读写 ini配置文件 点此链接 'API 声明Public Declare Function GetPrivateProfileString Lib "kernel32 ...

  3. C# 文件的一些基本操作(转)//用C#读写ini配置文件

    C# 文件的一些基本操作 2009-07-19  来自:博客园  字体大小:[大 中 小] 摘要:介绍C#对文件的一些基本操作,读写等. using System;using System.IO;us ...

  4. C#操作读写INI配置文件

    一个完整的INI文件格式由节(section).键(key).值(value)组成.示例如:[section]key1=value1key2=value2; 备注:value的值不要太长,理论上最多不 ...

  5. c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)

    c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...

  6. 自己写的 读写 ini 配置文件类

    /// <summary> /// 不调用系统API 读写 ini 配置文件 /// </summary> public class RW_ini { #region ==== ...

  7. c#读写ini配置文件示例

    虽然c#里都是添加app.config 并且访问也很方便 ,有时候还是不习惯用他.那么我们来做个仿C++下的那种ini配置文件读写吧     其他人写的都是调用非托管kernel32.dll.我也用过 ...

  8. 使用C#读写ini配置文件

    INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若 ...

  9. WritePrivateProfileString等读写.ini配置文件

    配置文件中经常用到ini文件,在VC中其函数分别为: 写入.ini文件: BOOL WritePrivateProfileString( LPCTSTR lpAppName, // INI文件中的一个 ...

随机推荐

  1. Qimage QBuffer

    QImage image;QByteArray ba;QBuffer buffer(&ba);buffer.open(QIODevice::WriteOnly);image.save(& ...

  2. Gsoap在QT工程里如何调用

    Qt并没有SOAP的官方实现,都是借助三方库来实现,不过似乎有个QtSoap,不过这个不是太会用,所以还是用Gsoap 这里生成纯C文件, 1.下载gSOAP(http://sourceforge.n ...

  3. 复用$.ajax方式传递参数错误处理

    1.封装后的方法,在 data:inData 传递参数的方式和一般不一样,如果不注意会出现错误. function getDataByJsonP(methName, inData, fn) { $.a ...

  4. Hive学习之路 (三)Hive元数据信息对应MySQL数据库表

    概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理.上一篇hive的安装也是将元数据信息存放在MySQL数据库中. Hive的元数据信息在MySQL数据中有57 ...

  5. HBase学习之路 (一)HBase基础介绍

    产生背景 自 1970 年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后, 好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案.Hadoop 使用分 布式文 ...

  6. 20155314 2016-2017-2《Java程序设计》课程总结

    20155314 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:刘子健的第一篇博客 预备作业2:刘子健的第二篇博客--有关CCCCC语言(・᷄ᵌ・᷅) ...

  7. PAT乙级1004

    1004 成绩排名 (20 分)   读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正 ...

  8. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  9. GoldData学习实例-采集官网新闻数据

    概述 在本节中,我们将讲述抓取政府官网地方新闻.并将抓取的新闻数据融入到以下两张数据表news_site和news中. news_site(新闻来源) 字段 类型 说明 id bigint 主键,自动 ...

  10. webservice的 发布

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...