יצירת תיקיה זמנית בקבצי המערכת
כאשר נעשה שימוש בקבצים שנשמרים בתור Resources של התוכנה, ויש צורך
להעתיק אותם אל הכונן בשביל שימוש - תמונות למשל – קיימת כמובן האפשרות ליצור תיקיית-בת
בתוך תיקיית התוכנה, אך ניתן גם לעשות שימוש נוח יותר ולפרוס את הקבצים אל תוך
קבצי המערכת.
ראשית יש לשים לב להגדרות הבאות לקבצים:
-
Build Action:
Embedded Resources
-
Copy To
Output Directory: Do Not Copy
שלבי הביצוע:
1. יצירת
תיקיה עם שם אקראי כדי לשמור בתוכה את הקבצים
// Create a temp dirctory to save the images in:
string tempDirName = Path.Combine( Path.GetTempPath(),
System.Guid.NewGuid().ToString());
Directory.CreateDirectory(tempDirName);
2. חילוץ הקבצים מתוך האסמבלי
//Extract the images from the assembly resources
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
// You can get the images path in embedded resources by
watching:
string
file = myAssembly.GetManifestResourceNames()[0];
3. שמירת כל קובץ (תמונה)
בתיקיה הזמנית שיצרנו
using (Stream myStream =
myAssembly.GetManifestResourceStream(file))
{
using (Stream file_stream = File.Create(file)) {
CopyStream(myStream,
file_stream);
}
}
private static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer,
0, buffer.Length)) > 0) {
output.Write(buffer, 0, len);
}
}
4. לא נשכח למחוק את הקבצים ביציאה מהתוכנה
private static void Form1_Closing(object sender, FormClosingEventArgs e)
{
try {
Directory.Delete(tempDirName,
true);
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
}