Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages

מבוא לשפות תכנות באמצעות שפת C פרק 15 – קובץ File I/O

קבצי מחשב

קובץ מחשב הוא קובץ שאנו משתמשים בו על מנת לאכסן נתונים בפורמט דיגיטלי, כמו למשל טקסט או תמונה כאשר קבצים יכולים להיות מאורגנים בתוך תיקיות. ניתן לראות בקבצי מחשב כחלופה דיגיטלית למסמכים מנייר. כאשר אנחנו מתכנתים, קוד המקור שלנו נשמר בקבצי טקסט בעלי סיומות שונות. בשפת C למשל, קבצי התכנות נשמרים עם סיומת c., קבצי התכנות בשפת Java נשמרים עם הסיומת java. וקבצי התכנות בשפת Python נשמרים עם הסיומת py..

פלט וקלט של קבצים File Input/Output

בדרך כלל אנו יוצרים קבצים בעורכי טקסט שונים כגון Notepad ו-MS Word, אך לעתים אנו יוצרים קבצים בתוכנות מחשב שונות. קלט הקובץ Input הוא מידע אשר נכתב אל תוך תוך הקובץ, ופלט הקובץ Output הוא מידע שנקרא מתוך הקובץ. קלט ופלט Input/Output הם מושגים שאנו בדרך כלל משתמשים בהם יותר בהקשר של מסך המחשב, כפי שעשינו במהלך כל הקורס כאשר הוצאנו פלט של תכניות שכתבנו.

מצב פעולת קבצים File Operation Modes

כאשר אנו צריכים לפתוח קובץ קיים או קובץ חדש, אנו יכולים לפתוח קובץ במספר מצבים:

  • מצב קריאה בלבד Read-Only Mode – אם ברצונכם רק לקרוא מתוך קובץ מבלי לכתוב לתוכו, בשפות תכנות יש תחביר שבאמצעותו תוכלו לפתוח קבצים במצב קריאה בלבד
  • מצב כתיבה בלבד Write-Only Mode – אם ברצונכם רק לכתוב לתוך קובץ מבלי לקרוא מתוכו, בשפות תכנות יש תחביר שבאמצעותו תוכלו לפתוח קבצים במצב כתיבה בלבד
  • מצב קריאה וכתיבה Read & Write Mode – אם ברצונכם גם לכתוב וגם לקרוא מתוך הקובץ, נפתח את הקובץ במצב מצב קריאה וכתיבה
  • מצב סיפוח Append Mode – כאשר אנו פותחים קובץ לשם כתיבה בתוכו, המידע שאנו מזינים יתחיל להיכתב מתחילת הקובץ, כלומר שזה ייכתב במקום המידע שהיה קיים בקובץ. אם אנחנו לא רוצים לשכתב את תוכן הקובץ הקיים, עלינו לפתוח את הקובץ במצב סיפוח Append Mode. מצב סיפוח הוא מצב הכתיבה האולטימטיבי, שכן המידע ייכתב מסוף הקובץ. כמעט בכל שפות התכנות הקיימות יש תחביר שבאמצעותו ניתן לפתוח קובץ במצב סיפוח Append Mode

פתיחת קובץ 

על מנת לפתוח קובץ קיים או ליצור קובץ חדש, יש בשפת C פונקציה מובנית שנקראת ( )fopen. פקודה זו תאתחל אובייקט מסוג קובץ FILE, אשר יכיל את כל המידע הנחוץ. התחביר לפתיחת קובץ בשפת C ייראה כך:


FILE *fopen( const char * filename, const char * mode );

filename הוא שם הקובץ, ו-mode הוא מצב ההפעלה של הקובץ. בטבלה שלפניכם תוכלו לראות באיזה סימן עליכם להשתמש כדי להפעיל את הקובץ במצב מסוים:

סגירת קובץ

על מנת לסגור קובץ יש להשתמש בפונקציה ( )fclose:


FILE *fopen( const char * filename, const char * mode );

הפונקציה ( )fclose מחזירה את הערך 0 במידה והיא מצליחה או EOF, במידה ויש שגיאה בסגירת התוכנית הפונקציה ( )fclose תחזיר תו מיוחד. פונקציה זו למעשה סוגרת את הקובץ ומשחררת את זיכרון המחשב שנוצל על ידי הקובץ. אנו מגדירים את ה-EOF בראש הקובץ כך – stdio.h.

בחבילת C סטנדרטית יש בדרך כלל מגוון של פונקציות שניתן להשתמש בהם על מנת לקרוא ולכתוב לתוך קבצים כאשר מיד נראה חלק מהם, לקריאה מורחבת בנושא זה ואחרים יש לפנות למדריך מקיף לשפת C.

כתיבה בקובץ

על מנת לכתוב בקובץ יש להשתמש בפונקציה ( )fputc:


int fputc( int c, FILE *fp );

הפונקציה ( )fputc כותבת את הערך המשתנה c אל קלט קובץ FILE בשם fp. אם הפונקציה הצליחה לכתוב היא תחזיר 0 ואם תיכשל אז תחזיר EOF. אם השתמשתם עד כה במהדר שהתקנתם על המחשב, נסו להדר את התוכנית הבאה שתפתח קובץ בשם test.txt בתיקייה tmp/ ותכתוב שתי שורות על ידי שימוש בשתי פונקציות :


#include <stdio.h>

int main() {
FILE *fp;

fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp);
}

קריאה מתוך קובץ

על מנת לקרוא מתוך קובץ יש להשתמש בפונקציה ( )fgetc:


int fgetc( FILE * fp );

הפונקציה ( )fgetc קוראת תווים מתוך הקובץ FILE בשם fp, במידה והצליחה הפונקציה תחזיר ערך read, ואם נכשלה תחזיר EOF. התוכנית הבאה תיקח מידע מתוך הקובץ שייצרנו מקודם, תקרא מתוכו נתונים ותציג אותם כפלט:


#include <stdio.h>

main() {

FILE *fp;
char buff[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 );
fclose(fp);
}

ואז נקבל את התוצאה הבאה:

 : This
 : …is testing for fprintf
: …This is testing for fput

קובץ File I/O בשפת java

שפת Java מספקת מערך נרחב של פונקציות למניפולציית קלט ופלט של קבצים FILE I/O, לקריאה מורחבת בנושא יש לפנות למדריך מקיף לשפת Java. כעת נכתוב דוגמה של אותה התוכנית, כאשר הפעם היא נכתבה בשפת Java:


import java.io.*;

public class Main {
public static void main(String []args) throws IOException {
File file = new File("/tmp/java.txt");

// Create a File
file.createNewFile();

// Creates a FileWriter Object using file object
FileWriter writer = new FileWriter(file);

// Writes the content to the file
writer.write("This is testing for Java write...\n");
writer.write("This is second line...\n");

// Flush the memory and close the file
writer.flush();
writer.close();

// Creates a FileReader Object
FileReader reader = new FileReader(file);
char [] a = new char[100];

// Read file content in the array
reader.read(a);
System.out.println( a );

// Close the file
reader.close();
}
}

על מנת שנקבל את התוצאה הבאה: :

...This is testing for Java write
...This is second line

קובץ File I/O בשפת Python

זוהי דוגמה של אותה התוכנית, כאשר הפעם היא נכתבה בשפת Python:


# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

על מנת שנקבל את התוצאה הבאה: :

...This is testing for Python write
...This is second line

רוצים לשתף את המדריך?

שיתוף ב facebook
שיתוף ב twitter
שיתוף ב telegram
שיתוף ב whatsapp
שיתוף ב linkedin
שיתוף ב tumblr
שיתוף ב email
שיתוף ב reddit
שיתוף ב skype
שיתוף ב vk

אהבתכם את המדריך? פתר לכם תקלה?

גולשים יקרים, רוב התכנים המוצגים באתר נכתבים בהתנדבות מלאה מתוך כוונה להנגיש מידע עבורכם. אם נתקלתם במדריך חינמי שפתר לכם תקלה או לימד אתכם משהו חדש שלא ידעתם, וברצונכם לתגמל את כותב המדריך או סתם להזמין אותו לכוס קפה, הינכם יותר ממוזמנים לתרום.

כתיבת תגובה