C#实现利用Windows API读写INI文件的方法
作者:抢小孩糖吃 发布时间:2023-03-16 01:23:06
标签:C#,INI
本文实例讲述了C#实现利用Windows API读写INI文件的方法。分享给大家供大家参考。具体如下:
写入时,如果没有INI文件,自动创建INI
如果在创建时,GetLastError:5 检查IniPath是否添加了文件名称.ini
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace NameSpace
{
/// <summary>
/// 利用Windows API读写INI文件
/// 写入时,如果没有INI文件,自动创建INI
/// 如果在创建时,GetLastError:5 检查IniPath是否添加了文件名称.ini
/// </summary>
public class INI
{
//声明kernel32.dll函数
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
//
[DllImport("kernel32")]
public static extern uint GetLastError();
string IniPath = null;
/// <summary>
/// 构造方法
/// </summary>
/// <param name="INIPath">INI文件的绝对路径,后面不需要斜杠</param>
/// <param name="INIFileName">INI文件名称使用时不需要斜杠,需要.ini</param>
public INI(string INIPath,string INIFileName)
{
Console.WriteLine("INI Object building");
IniPath = INIPath + "\\" + INIFileName;
Console.WriteLine("INIFilePath :" + IniPath);
}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="Section">Section</param>
/// <param name="Key">Key</param>
/// <param name="Value">Value</param>
public void IniWriteValue(string Section, string Key, string Value)
{
Console.WriteLine("---IniWriteValue---");
Console.WriteLine("Section :" + Section);
Console.WriteLine("Key :" + Key);
Console.WriteLine("Value :" + Value);
Console.WriteLine("IniPath :" + IniPath);
UInt32 Snapshot = GetLastError();
//
WritePrivateProfileString(Section, Key, Value, IniPath);
if (Snapshot != GetLastError())
{
Console.WriteLine("GetLastError :" + GetLastError());
}
}
/// <summary>
/// 读出INI文件
/// </summary>
/// <param name="Section">Section</param>
/// <param name="Key">Key</param>
public string IniReadValue(string Section, string Key)
{
StringBuilder result = new StringBuilder(256);
GetPrivateProfileString(Section, Key, null, result, 256, IniPath);
return result.ToString();
}
public bool ExistINIFile()
{
return File.Exists(IniPath);
}
/// <summary>
/// creat config file to application ini
/// </summary>
/// <param name="dnf_path"></param>
public void CreateConfig(string IP)
{
Console.WriteLine("CreateConfig");
Console.WriteLine("IP:" + IP);
try
{
WriteConfigIP(IP);
if (ExistINIFile())
{
Console.WriteLine("配置文件创建成功");
}
else
{
Console.WriteLine("配置文件创建不成功");
}
}
catch (Exception err)
{
Console.WriteLine("出错信息:" + err.ToString());
}
}
/// <summary>
/// write config for ip information
/// </summary>
/// <param name="IP"></param>
public void WriteConfigIP(string IP)
{
string Section = "Config";
string Key = "IP";
string Value = IP;
try
{
IniWriteValue(Section, Key, Value);
}
catch (Exception err)
{
Console.WriteLine("出错信息:" + err.ToString());
}
}
public string ReadConfigIP()
{
try
{
string Section = "Config";
string result = IniReadValue(Section, "IP");
Console.WriteLine("ReadConfigIP Result :" + result);
return result;
}
catch (Exception err)
{
Console.WriteLine("出错信息:" + err.ToString());
return "Read Error";
}
}
}
}
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起
- 暴露您view中所有影响可见外观的属性或者行为。•通过XML添加和设置样式•通过元素的属性来控制其外观和行为,支持和重要事件交流的事件 *
- 这篇文章主要介绍了java 对象参数去空格方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- (注意:本文基于JDK1.8) 前言包括迭代器中的remove()方法,以及删除单个元素、删除多个元素、删除所有元素、删除不包含的
- C++ 中const修饰虚函数实例详解【1】程序1#include <iostream>using namespace std;
- 在Android系统中,长按Power键默认会弹出对话框让你选择“飞行模式”,“静音”,“关机”等功能。这些功能对于手机非常适用,但是对于机
- 注意:不同的JDK版本的扩容机制可能有差异实验环境:JDK1.8扩容机制:当向ArrayList中添加元素的时候,ArrayList如果要满
- C++ 实现求最大公约数和最小公倍数最大公约数辗转相除法:int maxDivisor(int a, int b) { int
- Flutter页面在软键盘弹出的时候,可以设置 Scaffold 的 resizeToAvoidBottomInset 属性来设置
- 一、JPype简述1.JPype是什么?JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python
- spring容器是负责实例化、配置、组装组件的容器。容器的配置有很多,常用的是xml、Java注解和Java代码。在spring中Ioc容器
- 一、单例模式的思想想整理一些 java 并发相关的知识,不知道从哪开始,想起了单例模式中要考虑的线程安全,就从单例模式开始吧。以前写过单例模
- Allatori混淆技术介绍Allatori是一个Java 混淆器,它属于第二代混淆器,因此它能够全方位地保护你的知识产权。 Allator
- 在最近写的一个天气APP中用到了圆形头像这样的一个样式,中间是圆形的头像(被圆形切割的图片),周围是一个带颜色的圆环。如下图所示,今天就来说
- 一、Shiro简介:Apache Shiro是一个Java的安全(权限)框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在J
- 本文实例为大家分享了Android滑动组件悬浮固定在顶部效果的具体代码,供大家参考,具体内容如下要想实现的效果是如下:场景:有些时候是内容中
- 主要功能共有三个角色:管理员、教师、学生。管理员功能有:学生管理、教师管理、评教管理、指标管理、课程管理等。教师功能有:学生管理、指标管理、
- 后端接收form-data创建实体类public class Para_list //实体类 { &n
- 本文实例讲述了Android编程中File文件常见存储与读取操作。分享给大家供大家参考,具体如下:MainActivity文件代码如下:pa
- 一、 序列化和反序列化概念Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是