נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: כתיבה לקובץ

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
יוסי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 08 October 2007 בשעה 13:00 | IP רשוּם
ציטוט יוסי

אני רוצה לכתוב לקובץ ומשום מה לא מצליח לכתוב אלא רק לקרוא למרות שפתחתי אותו בתור "RW". השתמשתי בפונקצית FPRINTF וכשזה לא עבד רציתי לוודא שבאמת שום דבר לא עובר אז השתמשתי בFWRITE וראיתי שבאמת לא עבר שום בייט. נגמרו לי הרעיונות ואין לי מושג אפילו באיזה כיוון לחפש. אשמח לקבל רעיונות

יוסי

חזרה לתחילת העמוד הצג את כרטיס החבר של יוסי חפש הודעות אחרות של יוסי בקר בדף הבית של יוסי
 
יוסי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 08 October 2007 בשעה 14:18 | IP רשוּם
ציטוט יוסי

שכחתי לציין שגם בדקתי את ההרשאה בקובץ והיא מאפשרת לי לכתוב ולקרוא (MOD 666)

יוסי 

חזרה לתחילת העמוד הצג את כרטיס החבר של יוסי חפש הודעות אחרות של יוסי בקר בדף הבית של יוסי
 
הלוחם
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 08 October 2007 בשעה 18:19 | IP רשוּם
ציטוט הלוחם

האם בדקת בכלל שהקובץ נפתח לפני שהתחלת לכתוב...

חזרה לתחילת העמוד הצג את כרטיס החבר של הלוחם חפש הודעות אחרות של הלוחם בקר בדף הבית של הלוחם
 
יוסי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 08 October 2007 בשעה 18:44 | IP רשוּם
ציטוט יוסי

ודאי שבדקתי:

fp = fopen(fname, "rw");
 if (!fp)
  {
   printf("The file didn't open.\n");
  return 1;
  }

גם בדקתי תקינות:

status = fstat(fp, &buffer);
printf("status= %d, buffer.st_mode= 0x%x, errno= %d\n", status, buffer.st_mode, errno);

כאשר הפלט הוא:

status= -1, buffer.st_mode= 0x0, errno= 9

כלומר יש בעיה עם הקובץ, למרות שכפי שציינתי בדקתי כבר בהתחלה שהוא אכן נפתח

חזרה לתחילת העמוד הצג את כרטיס החבר של יוסי חפש הודעות אחרות של יוסי בקר בדף הבית של יוסי
 
Fate
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת
הודעות: 571
נשלח בתאריך: 08 October 2007 בשעה 23:01 | IP רשוּם
ציטוט Fate

תצטרך לשים אם הקוד השלם...
שנראה שאין בעיות בו...

חזרה לתחילת העמוד הצג את כרטיס החבר של Fate חפש הודעות אחרות של Fate
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 09 October 2007 בשעה 01:52 | IP רשוּם
ציטוט inHaze

למה פתחת אותו ב "rw"?? מה זה "rw"?

אם אתה רוצה לפתוח אותו לכתיבה אתה פותח ב: "wt" - לקובץ טקסט, "wb" לקובץ בינארי וכו'.. יש עוד כמה אפשרויות. הצירוף שרשמת הוא לא נכון.



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
יוסי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 October 2007 בשעה 10:25 | IP רשוּם
ציטוט יוסי

פתחתי את הקובץ בתור r+ וזה באמת פותר את בעיית הכתיבה לקובץ. אבל משום מה פונקצית fstat  ממשיכה לתת לי הודעת שגיאה:

status= -1, buffer.st_mode= 0x1, errno= 9

חזרה לתחילת העמוד הצג את כרטיס החבר של יוסי חפש הודעות אחרות של יוסי בקר בדף הבית של יוסי
 
יוסי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 October 2007 בשעה 15:24 | IP רשוּם
ציטוט יוסי

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

הפונקציה:

int NewWriteCfg(FILE *fp, char *varname, char *var)
{
char line[CONFIG_LINE_LENGTH], *p, str[256], r_str[256];
int linenum = 0, i, count, cnt;
 
 fseek(fp, 0, SEEK_SET);
 for (;;)
 {
  linenum++;
  fgets(line, sizeof(line), fp);

  line[strlen(line)-1] = 0; /* remove ending \n */
  if (feof(fp)){
fprintf(fp,"%s=%s\n", varname, var);
 return 2;
  }
  if (!line[0]) /* empty line */
   continue; 
  if (line[0] == ';' || line[0] == '#')   /* comment line */
   continue; 
  p = (char *)strchr(line, '=');
  if (!p)
   return -linenum; 
  *p = 0;   /* make variable name a string */ 
  if (strcasecmp(line, varname))
   continue;
  
  p++;
  fprintf(fp,"%s=%s\n", varname, var); 
 return 0;
 }
 
}

התוצאה המתבקשת:

currentTemperature=89
FanA_status="off"
FanB_status="off"

 התוצאה בשטח:

currentTemperature=89
currentTemperature=87
_status="off"
FanA_status="off"
FanB_status="off"

 

חזרה לתחילת העמוד הצג את כרטיס החבר של יוסי חפש הודעות אחרות של יוסי בקר בדף הבית של יוסי
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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