Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hướng dẫn cách đọc FileName dạng Unicode (16-bit)

    Hôm nay Dũng Còi hỏi một câu:

    - Làm thế nào để mở một file mà tên của nó ở dạng Unicode hả anh? Ví dụ: Dũng_Còi.txt

    - Trả lời:

    Trường hợp này không thể sử dụng kiểu char 8-bit thông thường, vì là có kèm kí tự Unicode mở rộng nên ta cần sử dụng tới kiểu kí tự mở rộng wchar_t (16 bit Unicode)

    Với khai báo kiểu wchar_t thì các chuỗi thông thường phải xác định bởi chữ L ở trước.
    Ví dụ:

    Mã:
    wchar_t* filename = L"Dũng_Còi.txt";
    Nếu bạn viết là:

    Mã:
    wchar_t* filename = "Dũng_Còi.txt";
    lập tức sẽ bị lỗi vì phép gán không tương xứng, không thể ép kiểu từ 8-bit char lên 16-bit wchar_t.

    Code sau đây demo cách đọc tên file dạng Unicode như nói ở trên:


    Mã:
    /* * @author Xcross87 * @date 03-May-2009 * @file openfile.cpp * @note *        open file name which is Unicode */ /* prototype */#include <stdio.h> /* declare: function */int OpenFile(wchar_t*, wchar_t*);int OpenFileEx(wchar_t*, wchar_t*); /* entry point */int main(void){    // file name in unicode    wchar_t* fname = L"DũngCòi.txt";    // open     if(OpenFileEx(fname, L"r"))         printf("OK 
    ");    else         printf("Error 
    ");         // return    return 0;} // @function    OpenFile()// @type    int// @param    //      wchar_t*    _iFileName        file name in 16-bit Unicode//      wchar_t*    _mode            file mode// @return //        0    if fail//        1    if successint OpenFile(wchar_t *_iFileName, wchar_t *_mode){    FILE* __stream;    __stream = _wfopen(_iFileName,_mode);    if(NULL == __stream) {        return 0;     }    fclose(__stream);    return 1;}  // @function    OpenFileEx()// @type    int// @param    //      wchar_t*    _iFileName        file name in 16-bit Unicode//      wchar_t*    _mode            file mode// @return //        0    if fail//        1    if successint OpenFileEx(wchar_t* _iFileName, wchar_t* _mode){    FILE* __stream;    int errno = _wfopen_s(&__stream, _iFileName, _mode);    if(0 != errno)        return 0;    fclose(__stream);    return 1;}
    Chúc vui vẻ! ^^~!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Dũng còi mà hỏi vấn đề này thì hơi ngạc nhiên đó, hồi đó bên VBclub nhớ vấn đề này đã xử lý cụ thể rồi mà.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Ð.Khánh
    Dũng còi mà hỏi vấn đề này thì hơi ngạc nhiên đó, hồi đó bên VBclub nhớ vấn đề này đã xử lý cụ thể rồi mà.
    Hồi bên VBClub hồi đó em dùng .Net (Sau khi hỏi thì em cũng tự xử được phần đó [IMG]images/smilies/online.gif[/IMG] )

    Còn giờ em hỏi trên C truyền thống [IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •