青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

twzheng's cppblog

『站在風(fēng)口浪尖緊握住鼠標(biāo)旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評(píng)論 :: 0 Trackbacks
C#讀寫(xiě)INI文件 

摘自:伊圖教程網(wǎng)[www.etoow.com]
http://www.etoow.com/html/2007-08/1187271505-1.html
 

       雖然微軟早已經(jīng)建議在
WINDOWS中用注冊(cè)表代替INI文件,但是在實(shí)際應(yīng)用中,INI文件仍然有用武之地,尤其現(xiàn)在綠色軟件的流行,越來(lái)越多的程序?qū)⒆约旱囊恍┡渲眯畔⒈4娴搅?/span>INI文件中。

       INI文件是文本文件,由若干節(jié)(section)組成,在每個(gè)帶括號(hào)的標(biāo)題下面,是若干個(gè)關(guān)鍵詞(key)及其對(duì)應(yīng)的值(Value)

  [Section]

  Key=Value

      

       VC中提供了API函數(shù)進(jìn)行INI文件的讀寫(xiě)操作,但是微軟推出的C#編程語(yǔ)言中卻沒(méi)有相應(yīng)的方法,下面是一個(gè)C# ini文件讀寫(xiě)類,從網(wǎng)上收集的,很全,就是沒(méi)有對(duì)section的改名功能,高手可以增加一個(gè)。

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections;
using System.Collections.Specialized;

namespace wuyisky{
  
/**/
  
/// <summary>
  
/// IniFiles的類
  
/// </summary>

  public class IniFiles
  
{
    
public string FileName; //INI文件名
    
//聲明讀寫(xiě)INI文件的API函數(shù)
    [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);
    
//類的構(gòu)造函數(shù),傳遞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文件不存在"));
        }

      }

      
//必須是完全路徑,不能是相對(duì)路徑
      FileName = fileInfo.FullName;
    }

    
//寫(xiě)INI文件
    public void WriteString(string Section, string Ident, string Value)
    
{
      
if (!WritePrivateProfileString(Section, Ident, Value, FileName))
      
{
 
        
throw (new ApplicationException("寫(xiě)Ini文件出錯(cuò)"));
      }

    }

    
//讀取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);
      
//必須設(shè)定0(系統(tǒng)默認(rèn)的代碼頁(yè))的編碼方式,否則無(wú)法支持中文
      string s = Encoding.GetEncoding(0).GetString(Buffer);
      s 
= s.Substring(0, bufLen);
      
return s.Trim();
    }


    
//讀整數(shù)
    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;
      }

    }


    
//寫(xiě)整數(shù)
    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;
      }

    }


    
//寫(xiě)B(tài)ool
    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, nullnull, Buffer, Buffer.GetUpperBound(0),
       FileName);
      
//對(duì)Section進(jìn)行解析
      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來(lái)實(shí)現(xiàn),StringBuilder只能取到第一個(gè)Section
      byte[] Buffer = new byte[65535];
      
int bufLen = 0;
      bufLen 
= GetPrivateProfileString(nullnullnull, 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());
 
    
//  }
    
//}
    
//清除某個(gè)Section
    public void EraseSection(string Section)
    
{
      
//
      if (!WritePrivateProfileString(Section, nullnull, FileName))
      
{

        
throw (new ApplicationException("無(wú)法清除Ini文件中的Section"));
      }

    }

    
//刪除某個(gè)Section下的鍵
    public void DeleteKey(string Section, string Ident)
    
{
      WritePrivateProfileString(Section, Ident, 
null, FileName);
    }

    
//Note:對(duì)于Win9X,來(lái)說(shuō)需要實(shí)現(xiàn)UpdateFile方法將緩沖中的數(shù)據(jù)寫(xiě)入文件
    
//在Win NT, 2000和XP上,都是直接寫(xiě)文件,沒(méi)有緩沖,所以,無(wú)須實(shí)現(xiàn)UpdateFile
    
//執(zhí)行完對(duì)Ini文件的修改之后,應(yīng)該調(diào)用本方法更新緩沖區(qū)。
    public void UpdateFile()
    
{
      WritePrivateProfileString(
nullnullnull, FileName);
    }


    
//檢查某個(gè)Section下的某個(gè)鍵值是否存在
    public bool ValueExists(string Section, string Ident)
    
{
      
//
      StringCollection Idents = new StringCollection();
      ReadSection(Section, Idents);
      
return Idents.IndexOf(Ident) > -1;
    }


    
//確保資源的釋放
    ~IniFiles()
    
{
      UpdateFile();
    }

  }

}


目前C# 對(duì)ini文件操作基本上要被xml文件取代了,但是我覺(jué)得ini文件的讀寫(xiě)仍然是編程的基本,是必須會(huì)的
posted on 2008-03-10 15:24 譚文政 閱讀(19940) 評(píng)論(15)  編輯 收藏 引用 所屬分類: windows 編程

評(píng)論

# re: C#讀寫(xiě)INI文件 2008-03-18 09:38 123
我還以為L(zhǎng)Z要用I/O流來(lái)讀寫(xiě)INI文件,看了才知道,還是API調(diào)用,就不要用“編程的基本”來(lái)形容了吧  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2008-05-23 15:18 lingyuan
恩,很好,謝謝  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2008-08-03 18:08 lqh
滿好的.有API非還要用IO流來(lái)讀寫(xiě)INI.又不是做試驗(yàn),或說(shuō)API不支持這種格式的讀寫(xiě).支持樓主.  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-03-02 17:32 liyi
你能再蠢一點(diǎn)嗎?@123
  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-03-02 17:32 liyi
lingyuan
你能再蠢一點(diǎn)嗎?@123   回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-05-18 12:41 AAA
樓主你能再蠢一點(diǎn)嗎?@  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-08-19 16:58 Jod
之前用IO自己寫(xiě)了一個(gè),主要是用字符替換和正則匹配來(lái)做。
這個(gè)方法和我看到的老外的源代碼差不多,也是一個(gè)方法。  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-08-28 13:54 weizy
說(shuō)樓主不好的自己貼一個(gè)看看,不要亂吆喝  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-09-09 09:24 劉永輝
http://www.cnblogs.com/zzyyll2/archive/2007/11/06/950584.html  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2009-10-08 10:26 我們學(xué)習(xí)網(wǎng)
呵呵,挺好的,不過(guò)我覺(jué)的用c#用xml挺好的,可以取代ini文件。  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2010-01-29 12:32 c#lover
我是感覺(jué)用xml有格式限制。比如存一段html文件,就用問(wèn)題了。 @我們學(xué)習(xí)網(wǎng)
  回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2010-06-15 20:02 HaynesMadeline25
Your useful data related to this topic goes parallel with the student dissertation. So, you could perform for <a href="http://www.master-dissertations.com">thesis writing</a> service.   回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2010-06-15 23:49 term papers online
Some specialists opine that to buy the analysis essays at the research paper services can be not a cheating, if college students study the papers closely.   回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2010-06-18 11:44 thesis
When students like to receive academic success on every subject you would order list of dissertation and buy thesis. I did that several times. I told just about dissertations in research paper writing services.   回復(fù)  更多評(píng)論
  

# re: C#讀寫(xiě)INI文件 2010-07-05 22:36 華子
怎么還回一個(gè)DataTable啊?  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品在这里| 亚洲精品视频在线观看免费| 国产精品乱看| 国产精品久久| 国产精品久久久一区二区| 欧美日韩综合在线| 国产精品美女在线| 国产麻豆视频精品| 国产欧美日韩伦理| 狠狠色综合日日| 亚洲高清激情| 一区二区三区欧美成人| 性欧美1819sex性高清| 欧美与欧洲交xxxx免费观看| 久久久久久久一区| 亚洲国产成人91精品| 亚洲国产精品美女| 日韩视频国产视频| 香蕉免费一区二区三区在线观看| 久久精品国产亚洲a| 欧美理论在线播放| 狠狠爱成人网| 亚洲小说欧美另类社区| 欧美中文在线免费| 亚洲国产成人av| 欧美一区二区三区久久精品茉莉花 | 亚洲第一精品影视| 亚洲一级电影| 欧美福利精品| 午夜亚洲激情| 欧美日韩综合视频| 亚洲国产精品久久91精品| 亚洲免费一在线| 免费亚洲电影| 欧美中文字幕| 国产精品日韩欧美一区二区三区| 亚洲国产天堂久久综合| 久久久久久亚洲精品中文字幕 | 欧美一区在线看| 欧美色欧美亚洲另类二区| 亚洲国产小视频在线观看| 欧美一区二区成人| 宅男噜噜噜66一区二区| 欧美日韩成人激情| 亚洲精品国产精品久久清纯直播 | 国产午夜精品一区理论片飘花| 亚洲精品一区二区三区四区高清| 久久国产手机看片| 亚洲一区二区三区色| 欧美色道久久88综合亚洲精品| 亚洲国产欧美一区二区三区久久| 男女精品视频| 亚洲欧美国产另类| 亚洲国产精品va在线看黑人| 亚洲男女自偷自拍图片另类| 欧美刺激午夜性久久久久久久| 国产欧美一区二区三区沐欲 | 国产日韩精品入口| 亚洲图片你懂的| 亚洲人久久久| 欧美欧美天天天天操| 亚洲精品久久久久中文字幕欢迎你 | 亚洲女同同性videoxma| 99伊人成综合| 国产精品乱人伦中文| 亚洲男人的天堂在线观看| 夜夜爽99久久国产综合精品女不卡| 欧美日韩国产免费观看| 亚洲一区二区三区高清| 日韩一级二级三级| 国产精品区一区二区三区| 香蕉成人伊视频在线观看| 国产精品99久久久久久有的能看| 欧美午夜不卡影院在线观看完整版免费| 日韩视频一区二区在线观看 | 亚洲国产经典视频| 欧美激情国产日韩| av不卡免费看| 亚洲综合日韩| 在线日本成人| 亚洲欧洲一二三| 国产精品男女猛烈高潮激情| 久久成人18免费网站| 久久青草久久| 一本到高清视频免费精品| 亚洲最黄网站| 国产亚洲视频在线| 欧美福利电影网| 国产精品久久久久久影视| 久久久久高清| 欧美成人小视频| 亚洲欧美日韩综合国产aⅴ| 久久久久国产精品麻豆ai换脸| 最新高清无码专区| 亚洲免费视频一区二区| 亚洲高清不卡一区| 一本久久a久久精品亚洲| 国产欧美精品在线播放| 亚洲一区成人| 亚洲精品欧美| 小黄鸭精品aⅴ导航网站入口| 亚洲激情在线视频| 欧美一区二区高清在线观看| 亚洲精品四区| 久久精品99久久香蕉国产色戒| 在线视频日本亚洲性| 欧美在线播放| 亚洲自啪免费| 欧美二区在线播放| 久久久久成人精品| 国产精品每日更新| 亚洲激情小视频| 精品福利av| 午夜精品久久| 亚洲影院免费观看| 欧美屁股在线| 亚洲国产高潮在线观看| 精品二区视频| 欧美一区二区在线免费观看| 亚洲视频日本| 欧美极品aⅴ影院| 欧美国产高清| 在线观看精品视频| 欧美一区二区视频在线观看| 亚洲深夜激情| 欧美日韩在线免费观看| 亚洲国产精品久久久久婷婷老年| 国外成人在线| 久久福利影视| 久久蜜桃香蕉精品一区二区三区| 国产精品你懂的在线| 中文av一区特黄| 亚洲欧美日韩网| 国产精品久久久久久久久果冻传媒 | 雨宫琴音一区二区在线| 亚洲欧美一区二区三区久久| 亚洲欧美网站| 国产精品亚洲一区| 亚洲一区在线播放| 欧美一区二区三区久久精品茉莉花| 国产精品v一区二区三区| 在线视频精品一区| 欧美一区二区三区免费观看| 国产日韩欧美亚洲| 久久全球大尺度高清视频| 免费不卡视频| 日韩视频免费在线观看| 欧美大片专区| 亚洲日本中文字幕区| 中文在线一区| 国产欧美精品一区二区三区介绍| 亚洲综合社区| 男女视频一区二区| 亚洲美洲欧洲综合国产一区| 欧美网站在线观看| 亚洲欧美伊人| 免费观看亚洲视频大全| 亚洲日韩成人| 国产精品久久久久一区二区三区共| 午夜精品区一区二区三| 另类国产ts人妖高潮视频| 亚洲日韩欧美视频一区| 国产精品久线观看视频| 亚洲在线成人| 欧美成人综合| 一卡二卡3卡四卡高清精品视频| 亚洲欧美国产毛片在线| 国外成人在线视频网站| 欧美成人一区在线| 亚洲视屏在线播放| 久久一区二区三区超碰国产精品| 亚洲激情视频在线| 国产精品二区三区四区| 欧美一区二区日韩| 亚洲欧洲日韩综合二区| 欧美在线观看日本一区| 亚洲国产日韩欧美一区二区三区| 欧美日韩国产精品成人| 欧美一级专区| 亚洲麻豆av| 麻豆精品在线播放| 亚洲色图制服丝袜| 在线观看日韩一区| 国产精品美女在线观看| 免费观看成人| 亚洲欧美日本国产有色| 欧美成人高清视频| 午夜久久tv| 99国产精品国产精品久久| 国产亚洲一区在线| 欧美日韩在线电影| 美女被久久久| 亚洲欧美在线网| 99re热这里只有精品免费视频| 久久蜜桃精品| 久久精品系列| 欧美一级淫片播放口| 一区二区三区精品| 亚洲区国产区| 亚洲黄一区二区三区|