-
@נ-נח התשובה הקצרה היא שאי אפשר.
למה? כי הפונקציהFile.Copy
לא נותנת לנו מידע על ההתקדמות.התשובה הארוכה היא שאם אתה ממש רוצה להציג התקדמות תצטרך להשתמש בפונקציה
CopyFileEx
, אבל זה פונקציה של C - לא של #C. כדי להשתמש בו תצטרך להשתמש באפשרות של #C לקרוא לפונקציות של C שנקרא Pinvoke.
זה נושא קצת מתקדם. -
לחילופין, ואחרי ההצעה המצויינת של @yossiz , מתוכן השאלות הכלליות שלך נראה שמה שאתה מנסה לעשות בסוף התהליך זה מנהל קבצים, ייתכן שקצת יותר מתוחכם מהרגיל ושלא יוכלו לעקוף וכו'
אם זה אכן כך, (והעניין הוא בעיקר התוצאה ולא רק הלימוד) מה שאני מציע, זה במקביל לחפש פרוייקט של מנהל קבצים בC# בגיט, וללמוד ממנו איך לעשות.
ואולי בכלל זו יכולה להיות נקודת התחלה יותר טובה מאשר לכתוב את הכל מאפס.
הנה דוגמא לפרוייקט בגיט שכתוב בC# שנראה מעניין (לא בדקתי אותו - רק על סמך מה שנראה)(זו רק הצעה. אם העניין שלך הוא ללמוד ובכלל לא התוצאה, אז אל תתייחס למה שכתבתי)
-
@dovid ראיתי את הפתרון הזה. משום מה זה מרגיש לי יותר נכון להשתמש ב-API מיועד לכך מאשר לממש בעצמך. אני תמיד מפחד ממצבים לא צפויים, וה-API המיועד יודע לטפל בהם ולפחות לזרוק שגיאות נכונות. חוץ מזה, בד"כ הוא ממוטב בצורה נכונה עבור העתקת קבצים. אני לא יודע אם אני צודק.
@נ-נח יש עוד פתרון, שזה להשתמש ב-API שנותן לך העתקת הקבצים של סייר ווינדוס עם הצגת התקדמות שלו.
פרטים כאן:
https://docs.microsoft.com/en-us/archive/msdn-magazine/2005/february/net-matters-file-copy-progress-custom-thread-pools#main:~:text=you can,c#: -
-
@נ-נח ב VB יש את זה מוכן, אז גם ב C# אפשר להשתמש בזה
התחביר ב VB:My.Computer.FileSystem.CopyDirectory(X, Y, FileIO.UIOption.AllDialogs)
הכתובת המלאה של הפונקציה:
Microsoft.VisualBasic.MyServices.FileSystemProxy.CopyDirectory(String, String, UIOption, UICancelOption)
ותוכל לקרוא לפונקציה זו גם בC# על ידי רפרנס לDLL המתאים.
-