עבור לתוכן

תוכנה לשליפת שמות של תיקיות עם קבצים מסויימים

Featured Replies

פורסם

יש לי מספר רב של תיקיות עם מוזיקה על המחשב,

והייתי רוצה לבנות תוכנה שתאפשר לי לשמור מעין LOG של כל תיקיה שיש בה קבצי אאודיו (mp3, mpc, ogg וכו..)

את התוכנה אני רוצה לבנות בC#, אך אני לגמרי מתחיל.

במהלך התכנון נתקלתי במספר בעיות:

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

איני יודע איך :\

וב. כיצד אני יכול לשלוף שם של תיקיה שבה נמצאים קבצים מסוג מסויים?

אני מצטער אם השאלות שלי מגוחכות, ואודה לכל עזרה :)

פורסם

קודם כל, כל הפונקציות שאתה צריך נמצאות ב-System.IO.Directory.

ספציפית, הפונקציות שמעניינות אותך הן GetFiles ו-GetDirectories.

כתוב שתי פונקציות:

פונקציה בשם containsAudioFiles, שמקבלת כתובת של תיקייה מסוימת, ובודקת אם יש בה קבצי אודיו, באמצעות הפונקציה GetFiles.

פונקציה שנייה, רקורסיבית, שמקבלת כתובת של תיקייה, ועושה שני דברים:

א. בודקת אם יש בה קבצי אודיו (באמצעות הפונקציה הראשונה).

ב. עוברת על כל התיקיות שיש בתוכה (באמצעות GetDirectories) וקוראת לעצמה עליהן, באופן רקורסיבי.

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

נ.ב. אתה יכול לעשות אותו דבר עם האובייקט DirectoryInfo. תראה עם מה יותר נוח לך לעבוד.

פורסם
  • מחבר

תודה רבה על התגובה המהירה. יש לי עוד מספר שאלות מפגרות בנוגע לכתוב:

1. באיזה סוג של פונקציה אני צריך להשתמש (סטרינג, סטטית, וכו..)?

2. אני אצטרך להשתמש בלולאת FOREACH בשביל לרוץ על כלל התיקיות? (כלומר, איך אני אעבוד עם הפלט של GETDIRECTORIES?)

תודה רבה מראש.

פורסם

א. ה"סוגים" שציינת לא סותרים זה את זה.

תזכור שהפונקציה שלך צריכה להחזיר רשימה (היא הרי אמורה להחזיר רשימה של תיקיות).

תחליט בעצמך אם היא צריכה להיות סטטית או לא, זה כבר שיקול של מימוש.

ב. איך שאתה רוצה. הדרך הנוחה כמובן היא foreach.

פורסם

רציתי רק לשאול:

למה לכתוב את התוכנה ב-C#?

מילא אם היית כותב בפרדיגמה מונחית עצמים.

הרבה יותר קל לכתוב ב-C \ C++, וכמובן שגם חוסף משאבים,

שהרי כל מה שאתה צריך זה להריץ את ה-EXE (קונסול) והוא יחזיר לך קובץ טקסט.

פורסם

אוי ויי, למה?

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

והחסכון של משאבים ב-C/C++ כל כך זניח בתכנית כזו.

פורסם
  • מחבר

התחלתי לנסות ללמוד C#,.

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

אז החלטתי להתמקד בC#, כי זה מה שאני רוצה ללמוד :)

ויכול להיות שאני טועה, אבל האם עניין המשאבים באמת קריטי בתוכנה שאני הולך להריץ ולשכוח?

לשניצל:

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

ואם היא מחזירה רשימה, כדאי לי לעשות אותה כמערך?

[br]פורסם בתאריך: 9.06.2009 בשעה 21:49:57


ועוד שאלה:

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

פורסם

התחלתי לנסות ללמוד C#,.

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

אז החלטתי להתמקד בC#, כי זה מה שאני רוצה ללמוד :)

מצוין.

ויכול להיות שאני טועה, אבל האם עניין המשאבים באמת קריטי בתוכנה שאני הולך להריץ ולשכוח?

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

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

ואם היא מחזירה רשימה, כדאי לי לעשות אותה כמערך?

הבנתי :)

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

זה אומר שקוראים לה מתוך המחלקה ולא מתוך מופע של המחלקה. חוץ מזה, היא יכולה לגשת רק לאיברים סטטיים של המחלקה.

בינתיים תעבוד רק עם פונקציות סטטיות (כי אתה עדיין לא מתכנת עם אובייקטים).

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

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

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

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

פורסם

במידה ואין ניסיון לחסוך כל משאב,

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

היא תרשום אותה לקובץ ותמשיך הלאה.

הרי שהפיתרון של לעשות רשימה עם כל התיקיות הוא רק בשביל לחסוך במשאבי התוכנית לא להשאיר

קובץ פתוח בכל מהלכה.

פורסם

הבן אדם רוצה ללמוד #C, ואתם ממליצים לו ללמוד שפות אחרות?

א. אין סיבה ללמוד היום VB. זו שפה מיושנת שכבר לא נתמכת יותר (C גם כן מיושנת, אבל כן כותבים בה).

ב. אין סיבה ללמוד VB.NET כשפה חדשה. הסיבה היחידה ללמוד VB.NET היא אם אתה כבר יודע VB ורוצה להתקדם לדוטנט. אפריורית #C עדיפה על VB.NET כמעט מכל בחינה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים