youngiran
یک شنبه 29 خرداد 1390, 00:04 صبح
دریافت لیست تصاویر از یک مسیر و نمایش انها در ListView
.Net Fremwork یک سری کلاس برای کار با فایلها فراهم کرده است که می توان به کلاس Directory و File اشاره کرد ، هر کدام از این دو کلاس شامل یک سری متد های Static هستند که هر کدام دارای وظیفه هایی مختلف می باشند . به عنوان مثال برای ساخت یک فایل از نوع Text می توانید از متد File.CreateText() استفاده کنید .
برای نمایش لیست یک دایرکتوری می توانید از متد Directory.GetFiles() استفاده کنید ، با دادن مسیر یک دایرکتوری این متد یک آرایه از نوع string که شامل نام فایلها می باشد را به ما برمی گرداند . این متد می تواند به سه روش استفاده شود .
string[] FilesList = new string[] { };
string DirectoryName = "/MyDirectory/";
string PhysicalDirectoryPath = Server.MapPath(DirectoryName);
قبل از استفاده از کلاس دایرکتوری ابتدا یک آرایه از نوع String ، یک String برای نگه داری مسیر دایرکتوری و یک String برای دریافت مسیر فیزیکی دایرکتوری ایجاد می کنیم .
FilesList = Directory.GetFiles(DirectoryPath);
روش اول به این صورت است که فقط آدرس فیزیکی را به این متد می دهیم و متد لیست فایلهای درون این دایرکتوری را به ما باز می گرداند .
FilesList = Directory.GetFiles(DirectoryPath, "*.jpg");
در این روش شما بعد از وارد کردن مسیر فیزیکی دایرکتوری پسوند فایلهایی که می خواهید لیست شود را می نویسید ، در مثال بالا ما به این متد پسوند *.jpg را پاس کردیم و این متد فقط فایلهایی را از دایرکتوری مورد نظر باز می گرداند که داری پسوند مورد نظر باشند .
توجه : نمی توانید به صورت همزمان چند پسوند با هم را به این متد پاس کنید .
FilesList = Directory.GetFiles(DirectoryPath, "*.jpg", SearchOption.TopDirectoryOnly);
یا
FilesList = Directory.GetFiles(DirectoryPath, "*.jpg", SearchOption.AllDirectories);
صورت سوم از ما می خواهد یک Enum با نام SearchOption را تنظیم کنیم ، این Enum دارای دو عضو است چنانچه این گزینه بر روی TopDirectoryOnly ست شود به متد می فهماند که فقط در همین دایرکتوری موجود به دنبال فایلها بگردد و چنانچه بر روی AllDirectories ست شود یعنی اینکه در تمامی دایرکتوری های درون دایرکتوری فعلی هم جستجو کند . این متد به صورت پیش فرض بر روی TopDirectoryOnly ست می شود .
اکنون فرض کنید که می خواهید لیست تمامی تصاویری که پسوند انها برابر jpg می باشد را در فرم نمایش دهیم .
string[] FilesList = new string[] { };
string DirectoryName = "/MyDirectory/";
string PhysicalDirectoryPath = Server.MapPath(DirectoryName);
FilesList = Directory.GetFiles(PhysicalDirectoryPath, "*.jpg");
//
List<string> BindImages = new List<string>();
//
foreach (string str in FilesList)
{
string GetFileName = DirectoryName + Path.GetFileName(str);
BindImages.Add(GetFileName);
}
//
dlFilesList.DataSource = BindImages;
dlFilesList.DataBind();
در ابتدا یک آرایه از نوع String که مسئول دریافت نام فایلها از متد getFile() هست رو معرفی کردیم ، خط بعدی یک String با نام DirectoryName معرفی کردیم که مسیر دایرکتوری رو تو خودش نگه می داره ، در خط بعد دوباره یک آرایه از نوع String با نام physicalDirectoryPath معرفی کردیم و با استفاده از متد Server.MapPath() آدرس مجازی رو به آدرس فیزیکی تبدیل کردیم ، در خط بعد متغییر FilesList رو برابر با متد getFiles() قرار دادیم تا خروجی های متد که نام فایلها باشه رو نگه داری کنه ، در خط بعد یک کالکشن از نوع String با نام BindImages ایجاد کردیم تا آدرس تصاویر رو تو این متغییر برای اتصال به یک DataList نگه داری کنه ، در خطوط بعدی با استفاده از حلقه foreach آدرس فایلها رو دونه دونه خوندیم و ابتدا با استفاده از متد Path.GetFileName() فقط نام تصاویر رو گرفتیم و اونو به همراه آدرس دایرکتوری تو متغییری به نام GetFileName ریختیم و بعد هم مقادیر رو به کالکشن BindImages اضافه کردیم ، و در پایان هم کالکشن BindImages رو به DataList ی رو که با نام dlFilesList به فرم اضافه کردیم بایند کردیم .
کد های Asp.Net
<asp:DataList ID="dlFilesList" runat="server" Width="100%">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# GetDataItem().ToString() %>' />
</ItemTemplate>
</asp:DataList>
در قسمت ImageUrl باید عبارت GetDataItem().ToString() رو وارد کنید تا مقادیر رو از کالکشن بخونه ، چون آرایه هایی مثل String هیچ نام فیلدی ندارن که بخوایم نام فیلد رو به اون نسبت بدیم ، البته با تکنولوژی هایی مثل Linq می تونیم یک نام جدید به خروجی اضافه کنیم .
در قسمت ضمیمه ها می توانید پروژه نمونه را دانلود کنید .
به زودی امکان تغییر اندازه تصاویر و ...
.Net Fremwork یک سری کلاس برای کار با فایلها فراهم کرده است که می توان به کلاس Directory و File اشاره کرد ، هر کدام از این دو کلاس شامل یک سری متد های Static هستند که هر کدام دارای وظیفه هایی مختلف می باشند . به عنوان مثال برای ساخت یک فایل از نوع Text می توانید از متد File.CreateText() استفاده کنید .
برای نمایش لیست یک دایرکتوری می توانید از متد Directory.GetFiles() استفاده کنید ، با دادن مسیر یک دایرکتوری این متد یک آرایه از نوع string که شامل نام فایلها می باشد را به ما برمی گرداند . این متد می تواند به سه روش استفاده شود .
string[] FilesList = new string[] { };
string DirectoryName = "/MyDirectory/";
string PhysicalDirectoryPath = Server.MapPath(DirectoryName);
قبل از استفاده از کلاس دایرکتوری ابتدا یک آرایه از نوع String ، یک String برای نگه داری مسیر دایرکتوری و یک String برای دریافت مسیر فیزیکی دایرکتوری ایجاد می کنیم .
FilesList = Directory.GetFiles(DirectoryPath);
روش اول به این صورت است که فقط آدرس فیزیکی را به این متد می دهیم و متد لیست فایلهای درون این دایرکتوری را به ما باز می گرداند .
FilesList = Directory.GetFiles(DirectoryPath, "*.jpg");
در این روش شما بعد از وارد کردن مسیر فیزیکی دایرکتوری پسوند فایلهایی که می خواهید لیست شود را می نویسید ، در مثال بالا ما به این متد پسوند *.jpg را پاس کردیم و این متد فقط فایلهایی را از دایرکتوری مورد نظر باز می گرداند که داری پسوند مورد نظر باشند .
توجه : نمی توانید به صورت همزمان چند پسوند با هم را به این متد پاس کنید .
FilesList = Directory.GetFiles(DirectoryPath, "*.jpg", SearchOption.TopDirectoryOnly);
یا
FilesList = Directory.GetFiles(DirectoryPath, "*.jpg", SearchOption.AllDirectories);
صورت سوم از ما می خواهد یک Enum با نام SearchOption را تنظیم کنیم ، این Enum دارای دو عضو است چنانچه این گزینه بر روی TopDirectoryOnly ست شود به متد می فهماند که فقط در همین دایرکتوری موجود به دنبال فایلها بگردد و چنانچه بر روی AllDirectories ست شود یعنی اینکه در تمامی دایرکتوری های درون دایرکتوری فعلی هم جستجو کند . این متد به صورت پیش فرض بر روی TopDirectoryOnly ست می شود .
اکنون فرض کنید که می خواهید لیست تمامی تصاویری که پسوند انها برابر jpg می باشد را در فرم نمایش دهیم .
string[] FilesList = new string[] { };
string DirectoryName = "/MyDirectory/";
string PhysicalDirectoryPath = Server.MapPath(DirectoryName);
FilesList = Directory.GetFiles(PhysicalDirectoryPath, "*.jpg");
//
List<string> BindImages = new List<string>();
//
foreach (string str in FilesList)
{
string GetFileName = DirectoryName + Path.GetFileName(str);
BindImages.Add(GetFileName);
}
//
dlFilesList.DataSource = BindImages;
dlFilesList.DataBind();
در ابتدا یک آرایه از نوع String که مسئول دریافت نام فایلها از متد getFile() هست رو معرفی کردیم ، خط بعدی یک String با نام DirectoryName معرفی کردیم که مسیر دایرکتوری رو تو خودش نگه می داره ، در خط بعد دوباره یک آرایه از نوع String با نام physicalDirectoryPath معرفی کردیم و با استفاده از متد Server.MapPath() آدرس مجازی رو به آدرس فیزیکی تبدیل کردیم ، در خط بعد متغییر FilesList رو برابر با متد getFiles() قرار دادیم تا خروجی های متد که نام فایلها باشه رو نگه داری کنه ، در خط بعد یک کالکشن از نوع String با نام BindImages ایجاد کردیم تا آدرس تصاویر رو تو این متغییر برای اتصال به یک DataList نگه داری کنه ، در خطوط بعدی با استفاده از حلقه foreach آدرس فایلها رو دونه دونه خوندیم و ابتدا با استفاده از متد Path.GetFileName() فقط نام تصاویر رو گرفتیم و اونو به همراه آدرس دایرکتوری تو متغییری به نام GetFileName ریختیم و بعد هم مقادیر رو به کالکشن BindImages اضافه کردیم ، و در پایان هم کالکشن BindImages رو به DataList ی رو که با نام dlFilesList به فرم اضافه کردیم بایند کردیم .
کد های Asp.Net
<asp:DataList ID="dlFilesList" runat="server" Width="100%">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# GetDataItem().ToString() %>' />
</ItemTemplate>
</asp:DataList>
در قسمت ImageUrl باید عبارت GetDataItem().ToString() رو وارد کنید تا مقادیر رو از کالکشن بخونه ، چون آرایه هایی مثل String هیچ نام فیلدی ندارن که بخوایم نام فیلد رو به اون نسبت بدیم ، البته با تکنولوژی هایی مثل Linq می تونیم یک نام جدید به خروجی اضافه کنیم .
در قسمت ضمیمه ها می توانید پروژه نمونه را دانلود کنید .
به زودی امکان تغییر اندازه تصاویر و ...