פורסם 2014 ביולי 2011 שנים אני רוצה למחוק קובץ במחשב דרך תוכנה שאני כותב עכשיו, איך אני יכול לבדוק בc# אם הקובץ שאני רוצה למחוק כבר פתוח? אם הוא פתוח הוא יזרוק חריג ויעצור את התוכנה, ואני רוצה שבמקום שהתוכנה תקרוס היא תציג הודעה שמודיעה שהקובץ פתוח וצריך לסגור אותו, איך אני יכול לבדוק אם הקובץ כבר בשימוש? נערך 2014 ביולי 2011 שנים על-ידי eido300
פורסם 2014 ביולי 2011 שנים מחבר אני חושב שtry/catch לא כל כך יעילים לי כאן כיוון ש:1. אני צריך שהוא יבדוק את זה לפני ניסיון המחיקה ולא שיגיד לי את זה בדיעבד אחרי הניסיון.2. כמו שהבנתי התוכנה לא תמשיך מהנקודה שהיא עצרה אלא מאחרי הבלוק.אני אפרט, לדוגמא: נניח שהcatch מדפיס הודעה עם השגיאה, אם אני מפעיל משפט foreach שעובר על כל הקבצים בתיקייה, ובקובץ השני התגלתה השגיאה, התוכנה תחזור לפעול אחרי המשפט foreach, ולא תחכה עד שאני אסגור את הקובץ ואז היא תמחוק את הקובץ, לכן אני מחפש משפט if שיבדוק שהקובץ סגור ורק אז במידה והוא סגור יפעיל את פקודת המחיקה, ואם הקובץ לא סגור שיודיע שהוא לא סגור ואז יבדוק שוב, ככה עד שהוא ימצא שהקובץ סגור ורק אז הוא ימחק אותו (בקיצור אותה צורה שהמערכת הפעלה מודיעה לך שאתה לא יכול למחוק קובץ כי הוא בשימוש), לכן try/catch לא כל כך טובים לי כאן. נערך 2014 ביולי 2011 שנים על-ידי eido300
פורסם 2014 ביולי 2011 שנים מחבר catch אמור לרשום שגיאה למה אי אפשר למחוק תקובץ ?כן הוא משתמש באחד מIOException שאומר שהקובץ כבר בשימוש במקום אחר.
פורסם 2014 ביולי 2111 שנים מחיפוש זריז לא נראה שמישהו מצא פתרון יותר טוב מ-try/catch:http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-useהפתרון שהם ממליצים הוא לפתוח את הקובץ לקריאה וכתיבה (כדי שלא ימחק) בלי אופציית שיתוף, ככה שאם הקובץ כבר פתוח במקום אחר תיזרק שגיאה. בתשובה השלישית ממליצים גם לבדוק את קוד השגיאה שמתקבל ממערכת ההפעלה כדי להבין בדיוק למה הקובץ לא נפתח.לגבי נקודה 2: אתה יכול לשים את ה-try/catch בתוך ה-foreach. נערך 2014 ביולי 2111 שנים על-ידי שניצל
פורסם 2014 ביולי 2411 שנים מחבר האמת שגם אני ראיתי את זה, פשוט היה קשה לי להאמין שבשפת low level יש פיתרון ואילו בשפת עלית אין פיתרון מובנה, כנראה שטעיתי...בסופו של דבר זה הקוד שהוספתי (שורות 3 ו7-29).זה בסדר?ולמה בכל התשובות מתעקשים להשתמש בstream?תודה רבה.עריכה: עכשיו זה עושה בעיות, אני אנסה שוב... נערך 2014 ביולי 2411 שנים על-ידי eido300
פורסם 2014 ביולי 2611 שנים אין שום פיתרון בלי try/catch - וזה בכוונה. בעולם מרובה תהליכים/נימים, זה שאתה יודע עכשיו אם הקובץ בשימוש לא יעזור לך בעתיד כשתנסה לגשת אליו - עד אז יכול להיות שתהליך אחר ינעל אותו. אפילו אם זאת השורה הבאה בקוד שלך. אפילו אם זה מחשב עם מעבד אחד. אפילו אם אתה נשבע לתוכנה שלך בכל היקר לך שאף אחד לא ינסה במילי שנייה הקרובה.
פורסם 2014 ביולי 2611 שנים מחבר הגיוני, הבנתי, תודה רבה.מה לגבי הstream? ראיתי את הרעיון של הפיתרון הזה בהמון אתרים וכולם השתמשו בfilestream מה הרעיון?
פורסם 2014 ביולי 2611 שנים זה בדיוק מה ש-ytoledano אמר - הדרך היחידה לוודא שהקובץ לא בשימוש היא לנסות להשתמש בו. הדרך "להשתמש" בקובץ היא לפתוח אותו לקריאה\כתיבה, וזה מה ש-FileStream עושה.אגב, גם אם אתה משתמש ב-FileStream על מנת לזהות שהקובץ לא בשימוש, זה לא מבטיח שהוא לא יהיה בשימוש כשתבוא למחוק אותו - יכול להיות שבדיוק בין הבדיקה הזו למחיקה עצמה תוכנה אחרת החליטה לפתוח את הקובץ, ולא תוכל למחוק אותו. לכן בכל מקרה גם במחיקה צריך try/catch. נערך 2014 ביולי 2611 שנים על-ידי שניצל
פורסם 2014 ביולי 2611 שנים מחבר כן את זה הבנתי אבל בשביל להשתמש בו אני יכול פשוט לעשות:file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);למה ליצור גם filestream? נערך 2014 ביולי 2611 שנים על-ידי eido300
פורסם 2014 ביולי 2611 שנים יש שם תשובות שונות של אנשים שונים. חלק השתמשו ב-File.Open וחלק ב-new FileStream.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.