24/05/2018, 15:51

Kỹ thuật truy xuất File.ini

Windows hỗ trợ việc truy xuất tập tin kiểu .i n i như ví dụ trong bằng các hàm được giới thiệu sau đây. Chú ý, khái niệm section chỉ mỗi phần trong tập tin bắt đầu với tên section lưu trữ dạng [tên se c tion], tiếp theo sau là các cặp khoá –giá trị ...

Windows hỗ trợ việc truy xuất tập tin kiểu .ini như ví dụ trong bằng các hàm được giới thiệu sau đây. Chú ý, khái niệm section chỉ mỗi phần trong tập tin bắt đầu với tên section lưu trữ dạng [tênsection],tiếp theo sau là các cặp khoá –giá trị như : Size=12.

[ChuongTrinh]

Ten=Chuong trinh Rong Vang

Logo = rongvang.bmp

ThoiGianTraLoi = 15

SoCauHoiToiDa=16

DWORD GetPrivateProfileSectionNames( LPTSTR lpszReturnBuffer,
    // buffer nhận danh sách các tên section trả về
    DWORD nSize, // kích thước buffer
    LPCTSTR lpFileName // tên file
    );

Danh sách các section (tên section) trong buffer, các tên section nối tiếp nhau cách nhau bởi ký tự 0. bufferchứa tên các section tìm thấy trong file (ví dụ có 3 section tên lần lượt là header,footervàslide,thì buffer sẽ là “header0footerslide0”)

Phải tìm cách trích bufer thành mảng các chuỗi tên section.

LPSTR *buf = new char[1000];
    memset(buf,0,1000) GetPrivateProfileSectionNames(buf,1000,"d:abc.ini"); 
    CStringArray arr;
    for(int i=0;i<1000;i++)
    if( (i==0 && buf[i]!=0) || // dau chuoi
    (i>0 && buf[i]!=0 && buf[i-1]==0)) // chuoi tiep theo
      {
        char *temp = &buf[i];
        arr.Add(temp);    
      }    
     int sectioncount = arr.GetSize();
     delete[] buf;
    
DWORD GetPrivateProfileSection(
    LPCTSTR lpAppName, // tên section cần trích 
    LPTSTR lpReturnedString, // return buffer 
    DWORD nSize, // kích thước buffer
    LPCTSTR lpFileName // tên file);
    

Buffer chứa danh sách các cặp khoá – giá trị của section cho trước, nối tiếp nhau cách nhau bởi ký tự 0. Buffer chứa tên các cặp key-value tìm thấy trong section (ví dụ có trong section Headercó các cặp Size=12Style=Bold,thì buffer sẽ là “Size=12Style=Bold0”)

Phải tìm cách trích bufer thành mảng các chuỗi tên key hoặc đếm có bao nhiêu cặp khoá – giá trị.

GetPrivateProfileSection (”Header”,buf,1000,"d:abc.ini");
    

Lấy giá trị nguyên của khoá

UINT GetPrivateProfileInt(
    LPCTSTR lpAppName, // tên section
    LPCTSTR lpKeyName, // tên key
    INT nDefault, // nếu không tìm thấy thì sử dụng giá trị này
    LPCTSTR lpFileName // tên file );
    

Lấy giá trị chuỗi của khoá

DWORD GetPrivateProfileString( LPCTSTR lpAppName, // tên section 
    LPCTSTR lpKeyName, // tên key
    LPCTSTR lpDefault,//nếu không tìm thấy, sử dụng giá trị này
    LPTSTR lpReturnedString, // destination buffer
    DWORD nSize, LPCTSTR lpFileName // initialization file name);
    

DWORD trả về tương ứng giá trị nguyên kích thước của khoá cần tìm

BUFFER trả về tương ứng giá trị chuỗi của giá trị tương ứng khoá trong section cho trước

int size = GetPrivateProfileInt ("Header","Size","d:abc.ini"); 
GetPrivateProfileString ("Header","Font",buf,1000,"d:abc.ini"); 
CString font = buf;

  • Nếu như không tìm thấy tập tin kết quả sẽ là kết quả mặc định.
  • Nếu như không tìm thấy tên section hay tên key, kết quả sẽ là kết quả mặc định.
0