引用“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. linux下如何实现mysql数据库每天自动备份定时备份

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢.   目录(?)[+]   概述   备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数 ...

  2. 【转】decorView和window之间的层级及关系

    转载请注明出处:http://blog.csdn.net/guxiao1201/article/details/41744107 首先贴出实现Activity对话框圆角的核心代码 @Override ...

  3. YII缓存整理

    缓存 缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 如下的应用配置指定了一 ...

  4. Hive学习之路 (十)Hive的高级操作

    一.负责数据类型 1.array 现有数据如下: 1 huangbo guangzhou,xianggang,shenzhen a1:30,a2:20,a3:100 beijing,112233,13 ...

  5. SQL Server 断开某个数据库所有连接(还原的时候需要)

    问题描述: SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样 解决办法: 右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问 -&g ...

  6. Sequelize-nodejs-5-Querying

    Querying查询 Attributes To select only some attributes, you can use the attributes option. Most often, ...

  7. python 编码规范起源:PEP8 编码规范中文版

    PEP: 8 标题: Python代码的样式指南 版: c451868df657 最后修改: 2016-06-08 10:43:53 -0400(2016年6月8日星期三) 作者: Guido van ...

  8. java学习笔记-JavaWeb篇一

    JavaWEB篇一 1 Tomcat的安装和配置 2 JavaWeb开发的目录结构 3 使用Eclipse开发JavaWeb项目 4 第一个Servlet程序 5 Servlet 的配置及生命周期方法 ...

  9. Javascript中的继承与Prototype

    之前学习js仅仅是把w3school上的基本语法看了一次而已,再后来细看书的时候,书中会出现很多很多没有听过的语法,其中一个就是js的继承以及总能看到的prototype.我主要在看的两本js书是&l ...

  10. java课设数据库打包报错

    最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...