如何使用C++語言,讀取ini文件中空格

在使用GetPrivateProfileString函數時,有時我們需要讀取ini配置文件中的前置空格,怎麼辦呢?


現在給出一個例子:

#include <stdio.h>
#include <windows.h>
int main()
{
	char szCont[100];
	int iReadLen = 0;

	memset(szCont, 0, sizeof(szCont));
	
	iReadLen = GetPrivateProfileString("TESTDATA", "Value", "", szCont, sizeof(szCont), ".\\Config.ini");
	printf("讀取的數據長度爲:%d\n讀取的數據內容爲:\"%s\"\n", iReadLen, szCont);

	return 0;
}

Config.ini文件的內容如下:

[TESTDATA]
Value='  這是一個讀取ini文件中前置空格的例子  '

輸出結果:

讀取的數據長度爲:39
讀取的數據內容爲:"  這是一個讀取ini文件中前置空格的例子  "


總結:如果想要保留從ini文件中讀到的字符串中的前置空格或者後置空格,只需要將每個key值中的整個值都使用英文的 單引號 引起來,就可以實現效果,否則,讀取出來的數據,將會是去掉前置和後置空格的字符串


GetPrivateProfileString使用時的限制事項如下:

1.可指定數據取得緩衝區的最大長度nSize爲0xFFFF, 即可最大取得的數據長度爲nSize-1(65534)。另外,使用WritePrivateProfileString寫入則沒有此限制。
2.讀取INI數據時,遇到換行字符(0x0D, 0x0A)與NULL(0x00)即刻停止,忽略之後的字符。
3.讀取INI時,會先從頭找Section,找到後即在此Section中查找Key,要是在這個Section找不到此Key的話,即認爲此Key不存在,即便此後還有同名的Section-Key定義。比如下面這個具體的例子裏,使用GetPrivateProfileString則永遠無法成功讀取到Section1Key2。
  [Section1]
   Section1Key1=・・・
  [Section2]
   Section2Key1=・・・
  [Section1]
   Section1Key2=・・・    //× 永遠無法找到它
4.此API函數有一個默認值參數lpDefault,用於指定沒有找到指定的字段名或鍵名時默認的返回字符。由於INI文件被獨佔讀取打開等原因導致的INI無法讀取時也返回此默認參數,所以無法得知此API調用本身是否發生了錯誤,即無法辨別是無法讀取INI還是指定的字段名或鍵名在INI中不存在 。
5.寫入INI的字符串要是有空格(0x20)開頭或是結尾,雖然可以正確寫入不過讀取時開頭與結尾的空格會被自動忽略。要是真的有必要保存這些空格的話,有一個解決辦法:寫入前在字符串的前後加上‘。而且讀取時會自動忽略開頭與結尾的’,無需多餘處理。

發佈了31 篇原創文章 · 獲贊 16 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章