『壹』 怎樣編寫Cmake的配置文件Cmakelist.txt
1
Cmake 有linux ,windows 多個平台版本,如圖是windows下版本程序
『貳』 用C#如何讀寫配置文件
INI文件就是擴展名為"ini"的文件。
其一般形式如下:
[section1] // 配置節
//鍵名 //鍵值
keyword1 = valuel
keyword2 = value2
……
[section2]
keyword3 = value3
keyword4 = value4
在Windows系統中,INI文件是很多,最重要的就是"System.ini"、"System32.ini"和"Win.ini"。該文件主要存放用戶所做的選擇以及系統的各種參數。用戶可以通過修改INI文件,來改變應用程序和系統的很多配置。但自從Windows 95的退出,在Windows系統中引入了注冊表的概念,INI文件在Windows系統的地位就開始不斷下滑,這是因為注冊表的獨特優點,使應用程序和系統都把許多參數和初始化信息放進了注冊表中。以及XML文件的國際標准化給INI文件又一次打擊。
但在某些場合,INI文件還擁有其不可替代的地位。比如綠色軟體的規定就是不向注冊表和系統中填入新東西。對於軟體需要儲存的信息就需要存入到文件中了。XML雖然兼容性比較好,但對於僅僅保存幾個自定義參數而言就顯得大材小用了。這是就可以選擇使用快速簡單的儲存方式:INI文件。
本文就來探討一下C#是如何對INI進行讀寫操作。
主要思路是調用Win32 API。
1.引入命名空間
usingSystem.Runtime.InteropServices;
2.聲明(把一個Win32 API函數轉成C#函數)
//聲明INI文件的寫操作函數 WritePrivateProfileString()
[DllImport("kernel32")]
private static extern longWritePrivateProfileString(string section, string key, string val, stringfilePath);
//聲明INI文件的讀操作函數 GetPrivateProfileString()
[DllImport("kernel32")]
private static extern intGetPrivateProfileString(string section, string key, string def, StringBuilderretVal, int size, string filePath);
3.函數
public void Writue(string section,string key, string value)
{
// section=配置節,key=鍵名,value=鍵值,path=路徑
WritePrivateProfileString(section,key, value, sPath);
}
public string ReadValue(stringsection, string key)
{
// 每次從ini中讀取多少位元組
System.Text.StringBuilder temp =new System.Text.StringBuilder(255);
// section=配置節,key=鍵名,temp=上面,path=路徑
GetPrivateProfileString(section,key, "", temp, 255, sPath);
returntemp.ToString(); //注意類型的轉換
}
到此基本功能已經實現了。下面我們將所有的代碼重新整合一下:
namespace Library.File
{
public class Ini
{
// 聲明INI文件的寫操作函數 WritePrivateProfileString()
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern longWritePrivateProfileString(string section, string key, string val, stringfilePath);
// 聲明INI文件的讀操作函數 GetPrivateProfileString()
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern intGetPrivateProfileString(string section, string key, string def,System.Text.StringBuilder retVal, int size, string filePath);
private string sPath = null;
public Ini(string path)
{
this.sPath = path;
}
public void Writue(string section,string key, string value)
{
// section=配置節,key=鍵名,value=鍵值,path=路徑
WritePrivateProfileString(section,key, value, sPath);
}
public string ReadValue(stringsection, string key)
{
// 每次從ini中讀取多少位元組
System.Text.StringBuilder temp =new System.Text.StringBuilder(255);
// section=配置節,key=鍵名,temp=上面,path=路徑
GetPrivateProfileString(section,key, "", temp, 255, sPath);
return temp.ToString();
}
}
}
開始調用函數。
// 寫入ini
Ini ini = newIni("C:/config.ini");
ini.Writue("Setting","key1", "HELLO WORLD!");
ini.Writue("Setting","key2", "HELLO CHINA!");
// 讀取ini
Ini ini = newIni("C:/config.ini");
string str1 =ini.ReadValue("Setting", "key1");
MessageBox.Show(str1);
二,在一些小的應用中,有時候不需要使用數據困這樣大規模的數據管理工具,也很少進行數據的查詢、修改等操作,而僅用文件來存儲數據。這時就需要使用。net中的文件操作對象,如file、streamReader、streamWriter等。
1,使用File對象操作文件
System.IO.File類提供了一系類的靜態辦法,完成對晚間的常用操作,如新建、刪除、拷貝、移動等
2,使用StreamWriter寫入文件
在System.IO空間中定義了一個文件寫入器對象StreamWriter,使用它可以以一種特定的編碼向輸出流中(Stream)寫入字元。
3,使用SteamReader讀取文件
與streamWrite對應
『叄』 怎樣編寫Cmake的配置文件Cmakelist.txt
CMake是一個編譯配置工具, 它是一個跨平台c/c++ 編譯配置工具。可以通過編寫CMakeLists.txt配置文件,可以控制生成的Makefile或者windows下工程文件。還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平台的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,只要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。
如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。
所以寫好CMakeLists.txt 是使用好Cmake的關鍵
工具/原料
Cmake
方法/步驟
1
Cmake 有linux ,windows 多個平台版本,如圖是windows下版本程序
怎樣編寫Cmake的配置文件Cmakelist.txt
2
更具一個簡單多目錄c項目,學下cmakelist.txt編寫規范
3
根目錄下cmakelist文件內容:
set(CMAKE_INSTALL_PREFIX):設置程序的安裝目錄,優先順序比cmake命令參數設置高。
add_subdirectory(編譯文件子目錄)
4
libhello 目錄下的cmakelist文件內容:
5
libhello 目錄下的cmakelist文件內容:
6
查看編譯後結果:
7
安裝後目錄結構:
『肆』 標准C語言,修改配置文件
在1.1後面帶空格
只要該行數據的最大長度確定,在你這行數據確定後,內不足部分全部用空格覆蓋。容
比如ver=1.0.2現在的長度是9個字元,如果我確定這行內容不會超過12個字元,那後面的內容我可以全用空格覆蓋,最後只要加個回車即可。
不知道你所謂的以後改不方便指什麼
『伍』 c語言讀寫配置文件
#include <stdio.h>
#include <string.h>
#define MAX_BUF 20
#define SERVER "localhost"
#define CONFIG_FILE "1.conf"
bool SetAuthServer(char* strServerAdd)
{
char buf[MAX_BUF], tempBuf[MAX_BUF];
memset(buf, 0, MAX_BUF);
memset(tempBuf, 0, MAX_BUF);
FILE *pF = fopen(CONFIG_FILE, "r");
if(!pF)
{
printf("打開文件失敗!\n");
return false;
}
fread(buf, MAX_BUF, 1, pF);
if(!feof(pF))
{
printf("讀取不完整,請把MAX_BUF設置為大一點, 當前大小為: %d\n", MAX_BUF);
fclose(pF);
return false;
}
fclose(pF);
char *lpPos = buf;
char *lpNewPos = buf;
while(lpNewPos = strstr(lpPos, SERVER))
{
strncpy(tempBuf+strlen(tempBuf), lpPos, lpNewPos-lpPos);
strcat(tempBuf, strServerAdd);
lpPos = lpNewPos + strlen(SERVER);
}
strcat(tempBuf, lpPos);
pF = fopen(CONFIG_FILE, "w");
if(!pF)
{
printf("打開文件失敗!\n");
return false;
}
fwrite(tempBuf, strlen(tempBuf), 1, pF);
fclose(pF);
return true;
}
void main()
{
char buf[20];
printf("請輸入一個字元串來修改伺服器配置: ");
scanf("%s", buf);
if(SetAuthServer(buf) == true)
printf("修改成功!\n");
else
printf("修改失敗!\n");
}