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 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    MSDN có source code VD vấn đề này

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    5. Xử lý file nhị phân
    Mặc dù các file với định dạng text rất hữu dụng, nhưng đôi khi bạn cần làm việc với các file nhị phân. Các hàm để ghi/đọc với các file này là get() và put().Để đọc một byte, sử dụng hàm get() và để ghi một byte sử dụng hàm put(). Cả hai hàm này đều nhận một đối số. Lưu ý là các hàm này chỉ ghi/đọc được một byte, nghĩa là một ký tự.
    Nếu bạn muốn đọc/ghi một khối dữ liệu, bạn có thể sử dụng các hàm read() và write(). Nguyên mẫu của chúng là:
    istream &read(char *buf, streamsize num);
    ostream &write(const char *buf, streamsize num);
    Với hàm read(), buf nên là một mảng ký tự mà khối dữ liệu đọc sẽ được đặt vào.
    Với hàm write(), buf là một mảng ký tự,là dữ liệu mà bạn muốn ghi vào file.
    Với cả hai hàm num là một số xác định dữ liệu được đọc/ghi.
    Nếu bạn đi đến cuối file, trước khi bạn đọc "num" ký tự, bạn có thể thấy bao nhiêu ký tự đọc được bằng cách dùng hàm gcount().

    Ví dụ 1: Sử dụng hàm put() và get().
    #include <fstream.h>
    void main()
    {
    fstream File("iloveyou.txt",ios:ut | ios::in | ios::binary);
    char ch;
    ch='o';
    File.put(ch); //Đưa nội dung của ch vào file.
    File.seekg(ios::beg); //đến đầu file.
    File.get(ch); //đọc một ký tự
    cout << ch << endl;
    File.close();
    }
    Ví dụ 2: Sử dụng read() and write()
    #include <fstream.h>
    #include <string.h>
    void main()
    {
    fstream File("test_file.txt",ios:ut | ios::in | ios::binary);
    char arr[13];
    strcpy(arr,"Hello World!"); //copy "Hello World!" vào arr
    File.write(arr,5); //ghi 5 ký tự đầu vào file- "Hello"
    File.seekg(ios::beg); trở về đầu file
    static char read_array[10];
    File.read(read_array,3); //Đọc 3 ký tự - "Hel"
    cout << read_array << endl;
    File.close();
    }


    6. Một số hàm hữu dụng.
    + tellg() – Trả về một giá trị nguyên, cho biết vị trí hiện tại của inside-pointer. Hàm này dùng khi đọc file. Ví dụ:
    #include <fstream.h>
    void main()
    {
    ofstream File("test.txt");
    File<<"Hello";
    File.close();
    ifstream File1("test.txt");
    char arr[10];
    File1.read(arr,10);
    cout << File1.tellg() << endl; //cho giá trị 5.
    File1.close();
    }
    + tellp() – Giống tellg() nhưng được sử dụng khi ghi vào file.
    + seekp() – Giống seekg(), được sử dụng khi ghi vào file.
    + ignore() – Sử dụng khi đọc file. Nếu bạn muốn "ignore" một số ký tự, hãy sử dụng hàm này. Thực ra, bạn có thể sử dụng hàm seekg() thay thế, nhưng hàm ignore() có một ưu điểm, bạnc có thể đặc tả một quy định giới hạn, nơi hàm ignore() sẽ kết thúc. Dạng hàm ignore() là:
    istream& ignore( int nCount, delimiter );
    Trong đó nCount là số lượng ký tự sẽ được bỏ qua và delimiter là giới hạn nơi hàm ignore() kết thúc. Nó có thể là EOF. Ví dụ:
    #include <fstream.h>
    void main()
    {
    //Ở trên chúng ta đã có "Hello World" trong file test_file.txt
    ifstream File("test_file.txt");
    static char arr[10];
    //Dừng hàm ignore() nếu gặp ký tự "l"
    File.ignore(6,'l');
    File.read(arr,10);
    cout << arr << endl; //cho "lo World!"
    File.close();
    }

    + getline() – Hàm này được sử dụng để đọc từng line, nhưng nó còn được thiết lập để ngừng đọc nếu nó gặp một ký tự nào đó. Để làm việc này sử dụng dạng sau:
    getline(array,array_size,delim);
    Trong đó delim là ký tự dùng để kết thúc việc đọc.
    Ví dụ:
    #include <fstream.h>
    void main()
    {
    //Nhớ là chúng ta đã có "Hello World" trong file "test.txt"
    ifstream File("test_file.txt");
    static char arr[10];
    File.getline(arr,10,'o');// Đọc cho tới khi gặp ký tự 'o'
    cout << arr << endl; //Cho "Hell"
    File.close();
    }
    + peek() – Hàm này sẽ cho mã ASCII của ký tự tiếp theo trong một luồng file input. Nhưng nó không dịch chuyển inside-pointer. Khác với hàm get() là cho ký tự tiếp theo và dịch chuyển inside-pointer. Nếu sử dụng hàm này hai lần liền sẽ được cùng một ký tự. Ví dụ:
    #include <fstream.h>
    void main()
    {
    ifstream File("test_file.txt");
    char ch;
    File.get(ch);
    cout << ch << endl; //cho "H"
    cout << char(File.peek()) << endl; //hiển thị "e"
    cout << char(File.peek()) << endl; //hiển thị "e"
    File.get(ch);
    cout << ch << endl; //hiển thị "e"
    File.close();
    }

    + _unlink() – Xoá toàn bộ file. Để sử dụng hàm này hãy "#include<io.h>" trong chương trình của bạn. Ví dụ:
    #include <fstream.h>
    #include <io.h>
    void main()
    {
    ofstream File;
    File.open("delete_test.txt"); //tạo file delete_test.txt
    File.close();
    _unlink("delete_test.txt"); //xoá file delete_test.txt
    File.open("delete_test.txt",ios::nocreate);//mở file đã xoá với open_mode là ios::nocreate sẽ gây //lỗi. Lỗi này là ios::failbit
    if(File.rdstate() == ios::failbit)
    cout << "Error...!
    ";
    File.close();
    }
    + putback() –Hàm này sẽ cho ký tự đọc lần cuối cùng và sẽ dịch chuyển inside-pointer về trước một ký tự. Ví dụ:
    #include <fstream.h>
    void main()
    {
    ifstream File("test_file.txt");
    char ch;
    File.get(ch);
    cout << ch << endl; // display "H", dịch chuyển inside-pointer sang "e"
    File.putback(ch); // đọc ký tự lần cuối "H", dịch chuyển inside-pointer về ký tự "H"
    cout << ch << endl; // display "H"
    File.get(ch);
    cout << ch << endl; // display "H"
    File.close();
    }

    Thank all who have read this tutor.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    nội dung có vẻ chất thật

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    //ghi 1 day so
    #include<windows.h>
    #include<stdio.h>
    int main(int argc, _TCHAR* argv[])
    {
    HANDLE hFile;
    DWORD wmWritten, nByte;
    int a[10]={1, 2,34, 45, 45, 565, 565, 56, 676, 232}, b[10];
    int i;


    hFile = CreateFile("day_so.txt",
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ,
    NULL,
    OPEN_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
    WriteFile(hFile,a,(DWORD)(sizeof(a)),&wmWritten,NU LL);
    printf("
    So byte da ghi: %d
    ", wmWritten);
    CloseHandle(hFile);

    hFile = CreateFile("day_so.txt",
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ,
    NULL,
    OPEN_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
    ReadFile(hFile,b,40,&nByte,NULL);
    for(i=0;i<10;i++)
    printf("%d, ", b[i]);
    CloseHandle(hFile);
    return 0;
    }

 

 

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
  •