freeCodeCamp/guide/arabic/c/file-handling/index.md

7.4 KiB

title localeTitle
File Handling التعامل مع الملف

التعامل مع الملف

المقدمة

إذا كنت قد قمت بكتابة برنامج C helloworld قبل ، فقد قمت بالفعل بإدخال ملف IO في C! تهانينا! : تادا:

`/* A simple hello world in C. */ #include <stdlib.h>

// Import IO functions. #include <stdio.h>

int main() { // This printf is where all the file IO magic happens! // How exciting! printf("Hello, world!\n"); return EXIT_SUCCESS; } `

تعد معالجة الملفات الجزء الأكثر أهمية من المبرمج. في لغة C ، نستخدم مؤشر بنية لنوع الملف لإعلان ملف

FILE *fp;

يوفر C عددًا من وظائف البناء لتنفيذ عملية الملف الأساسية

fopen () - قم بإنشاء ملف جديد أو افتح ملفًا موجودًا

fclose () - إغلاق ملف

getc () - يقرأ حرف من ملف

putc () - يكتب شخصية إلى ملف

fscanf () - يقرأ مجموعة من البيانات من ملف

fprintf () - يكتب مجموعة من البيانات إلى ملف

getw () - يقرأ عدد صحيح من الملف

putw () - يكتب عدد صحيح لملف

fseek () - ضبط الموقف لرغبة نقطة

ftell () - يعطي الموقع الحالي في الملف

الترجيع () - تعيين الموقف إلى نقطة البداية

فتح ملف

يتم استخدام الدالة fopen () لإنشاء ملف أو فتح ملف موجود

c fp = fopen(const char filename,const char mode);

في C هناك العديد من الوضع لفتح الملف ص - فتح ملف في وضع القراءة

ث - يفتح أو ينشئ ملفًا نصيًا في وضع الكتابة

أ - يفتح ملف في وضع الإلحاق

ص + - يفتح ملف في وضع القراءة والكتابة على حد سواء

a + - يفتح ملفًا في وضع القراءة والكتابة

w + - يفتح ملفًا في وضع القراءة والكتابة

إليك مثال على قراءة البيانات وكتابتها في ملف

`` `ج #تتضمن

تتضمن

الأساسية() { الملف * fp؛ char ch؛ fp = fopen ("hello.txt"، "w")؛ printf ("أدخل البيانات") ؛ while ((ch = getchar ())! = EOF) { putc (الفصل، FP)؛ } fclose (اف ب)؛ fp = fopen ("hello.txt"، "r")؛

بينما ((ch = getc (fp)! = EOF) printf ( "٪ ج"، الفصل)؛

fclose (اف ب)؛ }

``Now you might be thinking, "this justs prints text to my screen. How is this file IO?" The answer isn't obvious at first, and needs some understanding about the UNIX system. Under a UNIX system, everything is treated as a file, meaning you can read and write from it. This means that your printer can be abstracted as a file since all you do with a printer is write with it. It is also useful to think of these files as streams, since as you'll see later, you can redirect them with the shell.

So how does this relate to helloworld and file IO?

When you call printf, you are really just writing to a special file called stdout, short for standard output. stdout represents, well, the standard output as decided by your shell, which is usually the terminal. This explains why it printed to your screen.

There are two other streams (ie files) that are available to you with effort, stdin and stderr. stdin represents the standard input, which your shell usually attaches to the keyboard. stderr represents the standard error output, which your shell usually attaches to the terminal.

Rudimentary File IO, or How I Learnt to Lay Pipes

Enough theory, let's get down to business by writing some code! The easist way to write to a file is to redirect the output stream using the output redirect tool, >. If you want to append, you can use >>. N.b. these redirection operators are in bash and similar shells. ``

سحق

هذا سوف يخرج إلى الشاشة ...

./مرحبا بالعالم

... ولكن هذا سوف يكتب إلى ملف!

./helloworld> hello.txt

The contents of `hello.txt` will, not surprisingly, be

مرحبا بالعالم!

Say we have another program called `greet`, similar to `helloworld`, that greets you given your name.

ج

تتضمن

تتضمن

انت مين() { // تهيئة صفيف لاحتواء الاسم. اسم شار [20] ؛ / / اقرأ سلسلة وحفظها على الاسم. scanf ("٪ s" ، الاسم) ؛ // اطبع التحية. printf ("مرحبًا ،٪ s!" ، الاسم) ؛ العودة EXIT_SUCCESS ؛ }

Instead of reading from the keyboard, we can redirect `stdin` to read from a file using the `<` tool.

سحق

اكتب ملفًا يحتوي على اسم.

صدى كمالا> name.txt

سيقوم هذا بقراءة الاسم من الملف وطباعة التحيات على الشاشة.

./greet <name.txt

==> مرحبًا يا كمالا!

إذا أردت أيضًا كتابة التحية إلى ملف ، فيمكنك القيام بذلك باستخدام ">".

``### The Real Deal The above methods only worked for the most basic of cases. If you wanted to do bigger and better things, you will probably want to work with files from within C instead of through the shell. To accomplish this, you will use a function called fopen. This function takes two string parameters, the first being the file name and the second being the mode. Mode is basically permissions, so r for read, w for write, a for append. You can also combine them, so rw would mean you could read and write to the file. There are more modes, but these are the most used.

After you have a FILE pointer, you can use basically the same IO commands you would've used, except that you have to prefix them with f and the first argument will be the file pointer. For example, printf's file version is fprintf.

Here's a program called greetings that reads a from a file containing a list of names and writes to another file the greetings. ``

ج

تتضمن

تتضمن

انت مين() { // إنشاء مؤشرات الملف. FILE * names = fopen ("names.txt"، "r")؛ FILE * greet = fopen ("greet.txt"، "w")؛

`// Check that everything is OK. if (!names || !greet) { fprintf(stderr, "File opening failed!\n"); return EXIT_FAILURE; }

// Greetings time! char name[20]; // Basically keep on reading untill there's nothing left. while (fscanf(names, "%s\n", name) > 0) { fprintf(greet, "Hello, %s!\n", name); }

// When reached the end, print a message to the terminal to inform the user. if (feof(names)) { printf("Greetings are done!\n"); }

return EXIT_SUCCESS; `

}

Suppose `names.txt` contains the following:

كامالا لوجان أغنية مرحة

Then after running `greetings` the file `greet.txt` will contain:

مرحبا يا كمالا! مرحبا ، لوغان! مرحبا يا كارول! `` `

سوبر رائع ، أليس كذلك! :ابتسامة:

معلومات اكثر: