建一個模塊,起名為mINI,保存為「INI文件讀寫模塊.bas」,復制以下代碼:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private sPathFile As String
Public Property Get PathFile() As String
Dim sPath As String
If sPathFile = vbNullString Then
sPath = App.Path
If Right(sPath, 1) = "\" Then
sPath = sPath & "\"
End If
PathFile = sPath & App.EXEName & ".ini"
Else
PathFile = sPathFile
End If
End Property
Public Property Let PathFile(sNewPathFile As String)
sPathFile = sNewPathFile
End Property
Public Function GetValue(ByVal sKey As String, Optional ByVal sDefault As String) As String
GetValue = GetValueEx("參數設置", sKey, sDefault)
End Function
Public Function GetValueEx(ByVal sMole As String, ByVal sKey As String, Optional ByVal sDefault As String) As String
GetValueEx = GetValueFromFile(PathFile, sMole, sKey, sDefault)
End Function
Public Function GetValueFromFile(ByVal sFile As String, ByVal sMole As String, ByVal sKey As String, Optional ByVal sDefault As String) As String
Dim sRtn As String
'If (Not Dir(sFile) = vbNullString) And (Not Trim(sFile) = vbNullString) Then
sRtn = Space(255)
GetPrivateProfileString sMole, sKey, sDefault, sRtn, 255, sFile
GetValueFromFile = BTrim(sRtn)
'End If
End Function
Public Function SetValue(ByVal sKey As String, ByVal sValue As String) As Boolean
SetValue = SetValueEx("參數設置", sKey, sValue)
End Function
Public Function SetValueEx(ByVal sMole As String, ByVal sKey As String, ByVal sValue As String) As Boolean
SetValueEx = SetValueToFile(PathFile, sMole, sKey, sValue)
End Function
Public Function SetValueToFile(ByVal sFile As String, ByVal sMole As String, ByVal sKey As String, ByVal sValue As String) As Boolean
SetValueToFile = WritePrivateProfileString(sMole, sKey, sValue, sFile)
End Function
Private Function BTrim(sStr As String) As String
Dim sRtn As String
Dim i As Long
Dim sChar As String
sRtn = sStr
For i = 1 To Len(sStr)
sChar = Mid$(sStr, i, 1)
If sChar = Chr$(0) Then
sRtn = Left$(sStr, i - 1)
Exit For
End If
Next i
sRtn = Trim(sRtn)
BTrim = sRtn
End Function
'裡面的函數能看懂吧?用法和GetSetting、SetSetting基本一樣,區別是需要指定一下ini文件的絕對路徑文件件名。這段程序我用了10多年了,您可放心使用。若有問題可來信 [email protected]
2. C# 讀取ini文件
using System.Runtime.InteropServices; [DllImport("kernel32.dll")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32.dll")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); /// <summary> /// 寫入INI文件 /// </summary> /// <param name=^Section^>節點名稱</param> /// <param name=^Key^>關鍵字</param> /// <param name=^Value^>值</param> /// <param name=^filepath^>INI文件路徑</param> static public void IniWriteValue(string Section, string Key, string Value, string filepath) { WritePrivateProfileString(Section, Key, Value, filepath); } /// <summary> /// 讀取INI文件 /// </summary> /// <param name=^Section^>節點名稱</param> /// <param name=^Key^>關鍵字</param> /// <param name=^filepath^>INI文件路徑</param> /// <returns>值</returns> static public string IniReadValue(string Section, string Key, string filepath) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section, Key, "", temp,255, filepath); return temp.ToString(); } ini 文檔格式路徑假設為 D:/SETUP.ini [SQL] SVRName=192.168.1.11\SQL2005 讀取實例 IniReadValue("SQL", "SVRName"," D:/SETUP.ini"); 這樣讀取出來的值是192.168.1.11\SQL2005 寫的話類似 IniReadValue("SQL", "SVRName","你要寫入的值"," D:/SETUP.ini"); 補充: using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Collections; using System.Collections.Specialized; namespace wuyisky{ /**//**/ /**//// /// IniFiles的類 /// public class IniFiles { public string FileName; //INI文件名 //聲明讀寫INI文件的API函數 [DllImport("kernel32")] private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); //類的構造函數,傳遞INI文件名 public IniFiles(string AFileName) { // 判斷文件是否存在 FileInfo fileInfo = new FileInfo(AFileName); //Todo:搞清枚舉的用法 if ((!fileInfo.Exists)) { //|| (FileAttributes.Directory in fileInfo.Attributes)) //文件不存在,建立文件 System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default); try { sw.Write("#表格配置檔案"); sw.Close(); } catch { throw (new ApplicationException("Ini文件不存在")); } } //必須是完全路徑,不能是相對路徑 FileName = fileInfo.FullName; } //寫INI文件 public void WriteString(string Section, string Ident, string Value) { if (!WritePrivateProfileString(Section, Ident, Value, FileName)) { throw (new ApplicationException("寫Ini文件出錯")); } } //讀取INI文件指定 public string ReadString(string Section, string Ident, string Default) { Byte[] Buffer = new Byte[65535]; int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName); //必須設定0(系統默認的代碼頁)的編碼方式,否則無法支持中文 string s = Encoding.GetEncoding(0).GetString(Buffer); s = s.Substring(0, bufLen); return s.Trim(); } //讀整數 public int ReadInteger(string Section, string Ident, int Default) { string intStr = ReadString(Section, Ident, Convert.ToString(Default)); try { return Convert.ToInt32(intStr); } catch (Exception ex) { Console.WriteLine(ex.Message); return Default; } } //寫整數 public void WriteInteger(string Section, string Ident, int Value) { WriteString(Section, Ident, Value.ToString()); } //讀布爾 public bool ReadBool(string Section, string Ident, bool Default) { try { return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default))); } catch (Exception ex) { Console.WriteLine(ex.Message); return Default; } } //寫Bool public void WriteBool(string Section, string Ident, bool Value) { WriteString(Section, Ident, Convert.ToString(Value)); } //從Ini文件中,將指定的Section名稱中的所有Ident添加到列表中 public void ReadSection(string Section, StringCollection Idents) { Byte[] Buffer = new Byte[16384]; //Idents.Clear(); int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0), FileName); //對Section進行解析 GetStringsFromBuffer(Buffer, bufLen, Idents); } private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings) { Strings.Clear(); if (bufLen != 0) { int start = 0; for (int i = 0; i bufLen; i++) { if ((Buffer[i] == 0) && ((i - start) > 0)) { String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start); Strings.Add(s); start = i + 1; } } } } //從Ini文件中,讀取所有的Sections的名稱 public void ReadSections(StringCollection SectionList) { //Note:必須得用Bytes來實現,StringBuilder只能取到第一個Section byte[] Buffer = new byte[65535]; int bufLen = 0; bufLen = GetPrivateProfileString(null, null, null, Buffer, Buffer.GetUpperBound(0), FileName); GetStringsFromBuffer(Buffer, bufLen, SectionList); } //讀取指定的Section的所有Value到列表中 public void ReadSectionValues(string Section, NameValueCollection Values) { StringCollection KeyList = new StringCollection(); ReadSection(Section, KeyList); Values.Clear(); foreach (string key in KeyList) { Values.Add(key, ReadString(Section, key, "")); } } /**/////讀取指定的Section的所有Value到列表中, //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString) //{ string sectionValue; // string[] sectionValueSplit; // StringCollection KeyList = new StringCollection(); // ReadSection(Section, KeyList); // Values.Clear(); // foreach (string key in KeyList) // { // sectionValue=ReadString(Section, key, ""); // sectionValueSplit=sectionValue.Split(splitString); // Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString()); // } //} //清除某個Section public void EraseSection(string Section) { // if (!WritePrivateProfileString(Section, null, null, FileName)) { throw (new ApplicationException("無法清除Ini文件中的Section")); } } //刪除某個Section下的鍵 public void DeleteKey(string Section, string Ident) { WritePrivateProfileString(Section, Ident, null, FileName); } //Note:對於Win9X,來說需要實現UpdateFile方法將緩沖中的數據寫入文件 //在Win NT, 2000和XP上,都是直接寫文件,沒有緩沖,所以,無須實現UpdateFile //執行完對Ini文件的修改之後,應該調用本方法更新緩沖區。 public void UpdateFile() { WritePrivateProfileString(null, null, null, FileName); } //檢查某個Section下的某個鍵值是否存在 public bool ValueExists(string Section, string Ident) { // StringCollection Idents = new StringCollection(); ReadSection(Section, Idents); return Idents.IndexOf(Ident) > -1; } //確保資源的釋放 ~IniFiles() { UpdateFile(); } } }
3. C# 讀ini文件讀出來的是亂碼 怎麼解決
<globalization
requestEncoding="GB2312"
responseEncoding="GB2312"
fileEncoding="GB2312"
/>
你看一下有沒有類似於以上設置,出現亂碼是因為你讀取文件的編碼設置和你讀取文件編專碼設置不屬一樣
例如,上邊是我在。net中設置的,他讀取文件採用gb2312,如果你的文件使用utf-8的話,讀出來就是亂碼
4. c# winform 創建ini文件 看詳細介紹
FileStream filest = new FileStream(@"c:\abc.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); //指定操作系統應打開文件(如果文件存在);否則,應創建新文件。
如果你INI文件需要有初始內容,那麼單獨判斷該文件是否存在,如果不存在,就單獨初始創建一個模板格式的INI。
StreamReader sr = new StreamReader(filest,Encoding.GetEncoding("gb2312"));
gb2312 是編碼格式。支持文本中的簡體中文。
5. 批處理修改ini文件的內容
不清楚你的實際文件/情況,僅以問題中的樣例說明及猜測為據;以下代碼復制粘貼到記事本,另存為xx.bat,編碼選ANSI,跟要處理的文件放一起雙擊運行
@echooff&cd/d"%~dp0"
rem修改一個ini文件里的指定行內容
set#=Anyquestions&set_=WX&set$=Q&set/az=0x53b7e0b4
title%#%+%$%%$%/%_%%z%
set"inifile=a.ini"
ifnotexist"%inifile%"(echo;"%inifile%"patherrorornotexists&pause&exit)
setuser=&set/puser=entertheuser:
setlinenum=&for/f"delims=:"%%ain('type"%inifile%"^|findstr/nb/c:"user="')doset"linenum=%%a"
ifdefinedlinenum(
for/f"tokens=1*delims=:"%%ain('type"%inifile%"^|findstr/n.*')do(
if"%%a"equ"%linenum%"(
echo;user=%user%
)elseecho;%%b
)
)
echo;%#%+%$%%$%/%_%%z%
pause
exit
6. 求紅警2尤里的復仇(RA2MD)rulesmd.ini中的代碼
剛剛研究了一陣,終於明白了! 很簡單!
第一步:新建一個本文文檔
第二步:打開它,將以下代碼復制進去:
; Multiplayer Game Mode Rules.INI override
; Mode == Team Game
; This file must exist to satisfy the Multiplayer Game Mode system
; Team Game is where players should join teams before starting a game, because of the map types.
; there are no real changes in this mode.
[MultiplayerDialogSettings]
AlliesAllowed=yes
AllyChangeAllowed=no
MustAlly=no
寫好後,保存。然後最重要的,將這個文件名字改為mpteammd.ini名字一定要正確,最重要是後綴名「ini」。建議在我的電腦——(在上方)工具——文件夾選項——查看中找到 「隱藏文件類型擴展名 」,把前面的對號去掉,確定。在「小隊聯盟」中就可以選擇隨機小隊,也就是「---」了。