• Giga@hdv-tech.com
  • Dịch vụ trực tuyến 24H:
    • 7189078c
    • sns03
    • 6660e33e
    • youtube 拷贝
    • instagram

    C, Đọc và viết tài liệu

    Thời gian đăng: 11-08-2023

    Mô tả cách lập trình viên C tạo, mở và đóng tệp văn bản hoặc tệp nhị phân.

    Tệp, có nghĩa là một chuỗi byte, cho dù đó là tệp văn bản hay tệp nhị phân, Ngôn ngữ C, không chỉ cung cấp quyền truy cập vào các chức năng cấp cao nhất mà còn cung cấp lệnh gọi (OS) cơ bản để xử lý tệp trên thiết bị lưu trữ . Chương này sẽ giải thích các lệnh gọi quan trọng trong quản lý tài liệu.

    mở tập tin

    Thông thường sử dụng hàm fopen() để tạo một tệp mới hoặc mở một tệp hiện có, lệnh gọi này khởi tạo một đối tượng thuộc loại FILE chứa tất cả thông tin cần thiết để kiểm soát luồng. Đây là nguyên mẫu của lệnh gọi hàm này:

    TẬP_TIN *fopen (tên tệp const char *, chế độ const char *);

    Ở đây filename là một chuỗi để đặt tên cho file, giá trị của access mode có thể là một trong các giá trị sau:

    mẫu

    Sự miêu tả

    r

    Mở một tệp văn bản hiện có cho phép nó được đọc.

    w

    Mở một tệp văn bản cho phép ghi vào tệp. Nếu tệp không tồn tại, một tệp mới sẽ được tạo. Ở đây, chương trình của bạn ghi nội dung từ đầu tệp. Nếu tệp tồn tại, nó sẽ bị cắt bớt độ dài bằng 0 và viết lại.

    a

    Mở tệp văn bản và ghi vào tệp ở chế độ chắp thêm. Nếu tệp không tồn tại, một tệp mới sẽ được tạo. Tại đây, chương trình của bạn sẽ thêm nội dung vào các tệp bạn đã có.

    r+

    Mở một tệp văn bản cho phép bạn đọc và ghi tệp.

    w+

    Mở một tệp văn bản cho phép bạn đọc và ghi tệp. Nếu tệp đã tồn tại, tệp sẽ bị cắt ngắn về độ dài bằng 0 và nếu tệp không tồn tại, một tệp mới sẽ được tạo.

    a+

    Mở một tệp văn bản cho phép bạn đọc và ghi tệp. Nếu tệp không tồn tại, một tệp mới sẽ được tạo. Quá trình đọc bắt đầu ở đầu tệp và quá trình ghi chỉ ở chế độ chắp thêm.

    Nếu xử lý tệp nhị phân, hãy sử dụng chế độ truy cập sau để thay thế chế độ trên:

    "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

    tập tin đã đóng

    Để đóng tệp, vui lòng sử dụng hàm fclose(). Nguyên mẫu của hàm này như sau:

    int fclose ( FILE *fp );

    • Nếu tệp được đóng thành công, hàm fclose() trả về 0 và nếu lỗi trả về EOF. Trên thực tế, chức năng này sẽ xóa dữ liệu khỏi bộ đệm, đóng tệp và giải phóng tất cả bộ nhớ được sử dụng cho tệp đó. EOF là hằng số được xác định trong tệp tiêu đề stdio.h

    Thư viện chuẩn C cung cấp nhiều chức năng khác nhau để đọc và ghi tệp theo ký tự hoặc dưới dạng chuỗi có độ dài cố định.

    Viết vào tập tin

    Dưới đây là các hàm đơn giản nhất để ghi ký tự vào luồng:

    int fputc ( int c , FILE *fp );

    Hàm fputc() ghi giá trị ký tự của tham số c vào luồng đầu ra mà fp trỏ tới. Nếu ghi thành công, nó sẽ trả về ký tự đã viết và EOF nếu xảy ra lỗi. Bạn có thể sử dụng hàm sau để ghi một chuỗi kết thúc bằng null vào luồng:

    int fput ( const char *s , FILE *fp );

    Hàm fputs () ghi chuỗi s vào luồng đầu ra nơi fp trỏ tới. Nếu ghi thành công, nó sẽ trả về giá trị không âm và EOF nếu xảy ra lỗi. Bạn cũng có thể sử dụng hàm int fprintf (FILE * fp, const char * format,...) để ghi một chuỗi vào tệp. Hãy thử ví dụ sau:

    Lưu ý: Đảm bảo rằng bạn có sẵn một thư mục tmp và nếu nó không tồn tại, trước tiên bạn cần tạo nó trên máy tính của mình.

    /tmp thường là một thư mục tạm thời trên hệ thống Linux. Nếu bạn chạy trên hệ thống Windows, bạn cần sửa đổi nó thành một thư mục đã tồn tại trong môi trường cục bộ, chẳng hạn như: C:\tmp, D:\tmp, v.v.

    ví dụ sống

    #bao gồm int main () { FILE *fp = NULL ; fp = fopen ("/tmp/test.txt ", "w+"); fprintf (fp , "Đây là thử nghiệm cho fprintf...\n "); fputs ("Đây là thử nghiệm cho fputs...\n ", fp ); fđóng (fp); }

    Khi đoạn mã trên được biên dịch và thực thi, nó sẽ tạo một tệp test.txt mới trong thư mục /tmp. Và ghi vào hai dòng bằng hai hàm khác nhau. Hãy đọc tập tin này tiếp theo.

    Đọc tập tin

    Sau đây là hàm đơn giản nhất để đọc một ký tự từ một tệp:

    int fgetc ( FILE * fp );

    Hàm fgetc() đọc một ký tự từ file đầu vào mà fp trỏ tới. Giá trị trả về là ký tự đọc và EOF nếu xảy ra lỗi. Hàm sau cho phép bạn đọc một chuỗi từ luồng:

    char *fgets ( char *buf , int n , FILE *fp );

    Hàm fgets () đọc n-1 ký tự từ luồng đầu vào được chỉ đạo bởi fp. Nó sao chép chuỗi đã đọc vào bộ đệm đệm và thêm ký tự null vào cuối chuỗi để kết thúc chuỗi.

    Nếu hàm này gặp ký tự ngắt dòng '\ n' hoặc EOF của cuối file trước khi đọc ký tự cuối cùng thì chỉ trả về các ký tự đã đọc, kể cả ngắt dòng. Bạn cũng có thể sử dụng hàm int fscanf (FILE * fp, const char * format,...) để đọc chuỗi từ tệp, nhưng nó dừng đọc khi gặp dấu cách và ngắt dòng đầu tiên.

    ví dụ sống

    #bao gồm int main () { FILE *fp = NULL ; buff char [255]; fp = fopen ("/tmp/test.txt", "r "); fscanf(fp , "%s ", buff ); printf ("1: %s \n ", buff ); fgets (buff , 255, (FILE *)fp ); printf ("2: %s \n ", buff ); fgets (buff , 255, (FILE *)fp ); printf ("3: %s \n ", buff ); fđóng (fp); }

    Khi đoạn mã trên được biên dịch và thực thi, nó sẽ đọc các tệp được tạo trong phần trước và tạo ra kết quả sau:

    1: Cái này 2: đang thử nghiệm fprintf...

    3: Đây là thử nghiệm cho các kết quả...

    Đầu tiên, phương thức fscanf() chỉ đọc This .vì nó gặp một khoảng trắng ở phía sau. Thứ hai, gọi functon fgets() để đọc phần còn lại cho đến hết dòng. Cuối cùng, gọi fgets() để đọc hết hàng thứ hai.

    Hàm I/O nhị phân

    Hai hàm sau được sử dụng cho đầu vào và đầu ra nhị phân:

    size_t fread (void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file ); size_t fwrite (const void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file );

    Cả hai chức năng đều được đọc và ghi cho các khối lưu trữ - thường là mảng hoặc cấu trúc.

    Phần mềm đọc và ghi file C trên thuộc quyền sở hữu của HDV Phoelectron Technology Ltd., hoạt động kỹ thuật phần mềm. Và các công ty cung cấp thiết bị liên quan đến mạng (như: ACONU/ giao tiếpONU/ thông minhONU/ chất xơONU, v.v.) đã tập hợp một nhóm phần mềm hùng mạnh, để đáp ứng nhu cầu riêng của từng khách hàng, những người cần nó cũng có thể làm cho sản phẩm của chúng tôi thông minh và tiên tiến hơn.



    web