جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
مديريت فايل ها و دايرکتوري ها در ASP.NET
-(4 Body) 
مديريت فايل ها و دايرکتوري ها در ASP.NET
Visitor 561
Category: دنياي فن آوري
طراحان و پياده کنندگان برنامه هاي وب در زمان پياده سازي اين نوع برنامه ها به مواردي برخورد مي نمايند که لازم است به سيستم فايل سرويس دهنده وب دستيابي داشته و عمليات متفاوتي را در ارتباط با فايل ها و دايرکتوري ها انجام دهند . مثلا" شرکتي که خدمات hosting را انجام مي دهد ممکن است قصد طراحي يک control panel را داشته باشد تا اين امکان را براي مشتريان خود فراهم آورد که با استفاده از يک اينترفيس وب ، اقدام به ويرايش فايل هاي وب سايت خود نمايند .
در ASP کلاسيک ، به منظور دستيابي به سيستم فايل سرويس دهنده وب ، از FileSystemObject استفاده مي گرديد . در دات نت ، مجموعه اي از کلاس ها به منظور دستيابي به سيستم فايل ، پيش بيني شده است . کلاس هاي فوق در System.IO قرار داشته و از آنان به منظور انجام عمليات متفاوتي استفاده مي گردد :
• بازيابي و نمايش اطلاعات فايل ها و دايرکتوري ها
• عمليات بر روي مسيرها ( ترکيب آنان و استخراج عنصر بخصوصي )
• خواندن و يا نوشتن داده در فايل ها و بافرهاي حافظه

معرفي کلاس ها

از کلاس هاي زير به منظور کار با فايل ها ، دايرکتوري ها و stream استفاده مي گردد :
• Directory : متدهاي استاتيکي به منظور کار با دايرکتوري ها و درايوهاي منطقي را ارائه مي نمايد .
• DirectoryInfo : به منظور کار با يک دايرکتوري خاص و زيردايرکتورهاي آن استفاده مي گردد .
• File : متدهاي استاتيکي به منظور کار با فايل ها را ارائه مي نمايد .
• FileInfo : به منظور کار با يک فايل خاص استفاده مي گردد .
• Stream : کلاس پايه اي که از آن به منظور خواندن و يا نوشتن در يک backing store نظير سيستم فايل و يا شبکه ، استفاده مي گردد .
• StreamReader : با تلفيق يک stream به منظور خواندن کاراکتر از يک backing store استفاده مي شود .
• StreamWriter : با تلفيق يک stream به منظور نوشتن کاراکتر در يک backing store استفاده مي شود .
• TextReader : متدهاي لازم به منظور خواندن کاراکتر از هر منبعي ( نظير backing store ، رشته ها و ....) را ارائه مي نمايد .
• TextWriter : متدهاي لازم به منظور نوشتن کاراکتر در هر منبعي ( نظير backing store ، رشته ها و ....) را ارائه مي نمايد .
• BinaryReader : به منظور خواندن نوع هاي اوليه اي نظير رشته ها ، اعدادصحيح و Boolean از يک stream استفاده مي شود .
• BinaryWriter : به منظور نوشتن نوع هاي اوليه اي نظير رشته ها ، اعدادصحيح و Boolean در يک stream استفاده مي شود .
• FileSystem : به منظور خواندن و نوشتن داده در سيستم فايل استفاده مي شود .
• MemoryStream : به منظور خواندن و نوشتن داده در يک بافر حافظه استفاده مي شود .
backing store : به منبعي که مي توان با استفاده از يک شي Stream داده ئي را در آن نوشت و يا داده ئي را از آن خواند ، اطلاق مي گردد . هر backing store يک شي stream را ارائه مي نمايد که مي توان با استفاده از آن با منبع مورد نظر ارتباط برقرار نمود.

Directory و DirectoryInfo

براي کار با دايرکتوري ها از کلاس هاي Directory و DirectoryInfo استفاده مي گردد . کلاس Directory ، تعدادي متد استاتيک را به منظور انجام عمليات دلخواه بر روي دايرکتوري ها ارائه مي نمايد. کلاس DirectoryInfo ، مجموعه اي ازمتدهاي غير استاتيک به منظور کار بر روي يک دايرکتوري خاص را ارائه مي نمايد. از کلاس هاي فوق به منظور انجام عمليات زير استفاده مي شود :
• ايجاد و حذف دايرکتوري
• تشخيص وجود يک دايرکتوري
• بدست آوردن ليستي از زيرداکتوري ها و يا فايل هاي موجود در يک دايرکتوري خاص
• دريافت اطلاعات در رابطه با دايرکتوري ها نظير تاريخ ايجاد ، صفات و اعمال تغييرات لازم در آنان
• آگاهي از دايرکتوري جاري و تغيير آن ( صرفا" براي کلاس Directory )
• مشخص نمودن ليستي از درايوهاي موجود ( صرفا" براي کلاس Directory )
مثال : استفاده از متد Exists کلاس Directory به منظور تشخيص وجود يک دايرکتوري

تشخيص وجود يک دايرکتوري

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
      if Directory.Exists("C:\SrcoFolder") then
          Response.Write("دايرکتوري وجود دارد" )
      else
         Response.Write( "دايرکتوري وجوددارند")
end if
%>

متد Exists ، استاتيک است . بنابراين ما مجبور نخواهيم بود که يک متغير و نمونه از کلاس Directory را ايجاد نمائيم .
مثال : استفاده از متد Exists کلاس DirectoryInfo به منظور تشخيص وجود يک دايرکتوري

تشخيص وجود يک دايرکتوري

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
Dim dir as DirectoryInfo
dir = new DirectoryInfo("C:\SrcoFolder")

  if dir.Exists = true then
      Response.Write( "دايرکتوري وجود دارد")
  Else
      Response.Write( "دايرکتوري وجوددارند")
end if
%>

براي تشخيص وجود يک دايرکتوري با استفاده از کلاس DirectoryInfo ، مي بايست يک نمونه از کلاس فوق را ايجاد و در ادامه نام دايرکتوري را به عنوان پارامتر در اختيار آن قرار دهيم .
مثال : نمايش تاريخ ايجاد يک دايرکتوري

نمايش تاريخ ايجاد يک دايرکتوري

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
Dim dir as DirectoryInfo
dir = new DirectoryInfo("C:\SrcoFolder")

  if dir.Exists = true then
     Response.Write( "دايرکتوري وجود دارد")
     Response.Write( "<br>Created: " & dir.CreationTime )
  Else
      Response.Write( "دايرکتوري وجوددارند")
end if
%>

File و FileInfo

براي دستيابي به اطلاعات مرتبط با فايل ها از دو کلاس File و FileInfo استفاده مي گردد . در اين رابطه مي توان عمليات زير را انجام داد :
• ايجاد ، حذف ، باز نمودن ، کپي و انتقال فايل ها ( به منظور نوشتن ، خواندن ، اضافه نمودن و يا بستن فايل استفاده نمي گردد)
• بازيابي اطلاعات مرتبط با فايل ها نظير تاريخ ايجاد ، صفات و اعمال تغييرات لازم در آنان
کلاس File نظير کلاس Directory داراي مجموعه اي از متدهاي استاتيک به منظور انجام عمليات دلخواه در ارتباط با فايل ها است . کلاس FileInfo داراي مجموعه اي از متدهاي غيراستاتيک و خصلت ها به منظور کار با يک فايل خاص است .
مثال : استفاده از متد Exists کلاس File به منظور تشخيص وجود يک فايل

تشخيص وجود يک فايل

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>

<%

   if File.Exists("C:\SrcoFolder\Test.Txt") then
     Response.Write( "فايل وجوددارد")
   else
     Response.Write( "فايل وجود ندارد")
end if

%>


مثال : استفاده از متد Exists کلاس FileInfo به منظور تشخيص وجود يک فايل تغيير و تشخيص دايرکتوري جاري

تشخيص وجود يک فايل

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>

<%

Dim  myfile as FileInfo
myfile = new FileInfo("C:\SrcoFolder\Test.Txt")

if myfile.Exists = true then
    Response.Write( "<br>فايل وجود دارد")
    Response.Write( "<br>Created: " & myfile.CreationTime )
  else
  Response.Write( "<br/>فايل وجود ندارد")
end if

%>

تغيير و تشخيص دايرکتوري جاري

زماني که يک صفحه ASP.NET اجراء مي گردد ، thread استفاده شده به منظور اجراي کد لازم جهت توليد صفحه ، به صورت پيش فرض داراي دايرکتوري جاري Windir%\System32 % است . در صورت پاس دادن پارامتري نظير نام يک فايل به هر يک از کلاس هاي System.IO ، در دايرکتوري جاري عمليات مورد نظر انجام خواهد شد ( فرض مي شود که فايل در دايرکتوري جاري است ).
بازيابي و تغيير دايرکتوري جاري از جمله عملياتي است که توسط کلاس Directory انجام مي شود . مثال زير نحوه تغيير دايرکتوري جاري با استفاده از SetCurrentDirectory و بازيابي مجدد آن توسط GetCurrentDirectory را نشان مي دهد .

تغيير و بازيابي دايرکتوري جاري

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>

<%

Directory.SetCurrentDirectory("C:\Test")
Response.Write( "مسير جاري: " & _
         Directory.GetCurrentDirectory()  )
 
%>

نمايش ليست درايوهاي منظقي موجود

به منظور نمايش ليست درايوهاي منطقي موجود از متد GetLogicalDrives کلاس Directory استفاده مي شود . متد فوق ، آرايه اي از نوع string شامل ليست درايوهاي موجود را برمي گرداند .

تغيير و بازيابي دايرکتوري جاري

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>

<%

Directory.SetCurrentDirectory("C:\Test")
Response.Write( "مسير جاري: " & _
         Directory.GetCurrentDirectory()  )
 
%>

ايجاد يک دايرکتوري

براي ايجاد يک دايرکتوري از متد CreateDirectory کلاس Directory استفاده مي شود . کد زير نحوه ايجاد يک ساختار سلسله مراتبي از دايرکتوري هاي مورد نياز را نشان مي دهد .

  ايجاد دايرکتوري 

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>

<%
  Directory.CreateDirctory("C:\Test1\Test2\Test3") 
%>

پس از فراخواني متد CreateDirectory ، در ابتدا بررسي لازم در رابطه با وجود يک دايرکتوري با نام Test1 در درايو C انجام مي شود ، در صورتي که دايرکتوري فوق وجود نداشته باشد ، آن را ايجاد مي نمايد . در ادامه بررسي لازم در رابطه با دايرکتوري Test2 انجام خواهد شد و در صورت عدم وجود يک دايرکتوري با اين نام در دايرکتوري Test1 ، اين دايرکتوري نيز ايجاد مي گردد . در نهايت ، متد CreateDirectory بررسي لازم در رابطه با دايرکتوري Test3 را انجام مي دهد و در صورتي که اين دايرکتوري در مسير مربوطه نيز وجود نداشته باشد ، آن را ايجاد مي نمايد .
نکته : در صورتي که سعي نمائيم يک دايرکتوري را با نام خاصي ايجاد نمائيم که قبلا" ايجاد شده است ، با يک Exception مواجه نخواهيم شد . در صورتي که مي خواهيم از وجود يک دايرکتوري قبل از ايجاد آن مطمئن شويم ، مي توان از متد Directory.Exists استفاده نمود . در صورتي که هر يک از بخش هاي آرگومان متد CreateDirectory نادرست باشند، با يک ArgumentException مواجه خواهيم شد .
مثال : نمايش محتويات يک دايرکتوري
کلاس Directory داراي متدهاي متعددي به منظور بازيابي محتويات يک دايرکتوري است :

عملکرد

پارامتر

 متد

آرايه اي از نوع Stringشامل نام هر يک از دايرکتوري هاي موجود در مسير مشخص شده ، برگردانده مي شود .

Pathname

GetDirectories

مثال

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
  Dim dir As String
  Dim Subdirs() As String
  Subdirs=Directory.GetDirectories("C:\")
  For Each dir in Subdirs
    Response.Write( dir & "<br />" 
  Next
%>

عملکرد

پارامتر

 متد

آرايه اي از نوع Stringشامل نام هر يک از دايرکتوري هاي موجود در مسير مشخص شده و منطبق با الگوي جستجو ، برگردانده مي شود.

Pathname,
Search Path

GetDirectories

مثال

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
  Dim dir As String
  Dim Subdirs() As String
  Subdirs=Directory.GetDirectories("C:\" , "Sa*")
  For Each dir in Subdirs
    Response.Write( dir & "<br />" 
  Next
%>

عملکرد

پارامتر

 متد

آرايه اي از نوع Stringشامل نام هر يک از فايل هاي هاي موجود در مسير مشخص شده ، برگردانده مي شود .


Pathname
 

GetFiles

مثال

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
  Dim f As String
  Dim files() As String
  files=Directory.GetFiles("C:\Test" )
  For Each f in files
    Response.Write( f & "<br />" 
  Next
%>

عملکرد

پارامتر

 متد

آرايه اي از نوع Stringشامل نام هر يک از فايل هاي هاي موجود در مسير مشخص شده و منطبق با الگوي جستجو ، برگردانده مي شود.


Pathname,
Search Path
 

GetFiles

مثال

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
  Dim f As String
  Dim files() As String
  files=Directory.GetFiles("C:\Test","sa*" )
  For Each f in files
    Response.Write( f & "<br />" 
  Next
%>

عملکرد

پارامتر

 متد

آرايه اي از نوع Stringشامل نام هر يک از فايل ها و دايرکتوري هاي  موجود در مسير مشخص شده ، برگردانده مي شود .

Pathname

GetFileSystemEntries

مثال

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
  Dim item As String
  Dim items() As String
  items=Directory.GetFileSystemEntries("C:\Test")
  For Each item in items
    Response.Write( item & "<br />" 
  Next
%>

عملکرد

پارامتر

 متد

آرايه اي از نوع Stringشامل نام هر يک از فايل ها و دايرکتوري هاي موجود در مسير مشخص شده است و  منطبق با الگوي جستجو ، برگردانده مي شود.

Pathname,
Search Path
 

GetFileSystemEntries

مثال

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
  Dim item As String
  Dim items() As String
  items=Directory.GetFileSystemEntries("C:\Test","sa*")
  For Each item in items
    Response.Write( item & "<br />" 
  Next
%>

کلاس DirectoryInfo نيز داراي متدهاي GetDirectories ، GetFiles و GetFileSystemEntries است که داراي عملکردي مشابه متدهاي کلاس Directory مي باشند . در اين رابطه دو تفاوت عمده وجود دارد :
• پارامترPathname به عنوان آرگومان در اختيار متدهاي اشاره شده در کلاس DirectoryInfo قرار داده نمي شود. ( کلاس DirectoryInfo داراي آگاهي لازم در ارتباط با مسير مي باشد ).
• متدهاي فوق ،آرايه اي از نوع String را برنمي گردانند . متد GetDirectories آرايه اي از نوع DirectoryInfo ، متد GetFiles آرايه اي از نوع FileInfo و متد GetFileSystemEntries ، آرايه اي از نوع FileSystemInfo را بر مي گرداند .

حذف يک دايرکتوري

براي حذف يک دايرکتوري مي توان از متدهاي Directory.Delete و يا DirectoryInfo.Delete استفاده نمود. کد زير نحوه انجام اين کار را نشان مي دهد :

حذف يک دايرکتوري

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
Directory.Delete("C:\Test")
Dim dir As DirectoryInfo
dir = New DirectoryInfo("C:\Test")
dir.Delete 
%>

توضيحات

در صورتي که قصد حذف يک دايرکتوري را داشته باشيم که موجود نمي باشد ، با يک خطاي DirectoryNoFound ، مواجه خواهيم شد. اگر قصد حذف يک دايرکتوري را داشته باشيم که در آن فايل و يا دايرکتوري هاي ديگري موجود مي باشد، با يک خطاي IOException مواجه خواهيم شد. براي حل اين مسئله ، مي توان از نسخه overload متد Delete استفاده نمود. در چنين مواردي در زمان استفاده از متد Delete ، مي بايست در رابطه با حذف و يا عدم حذف فايل ها و يا دايرکتوري هاي موجود در يک دايرکتوري تعيين تکليف شود. کد زير نحوه انجام اين کار را نشان مي دهد :

حذف يک دايرکتوري با تعيين تکليف در رابطه با فايل ها و دايرکتوري ها موجود در آن 

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
Directory.Delete("C:\Test",True)
Dim dir As DirectoryInfo
dir = New DirectoryInfo("C:\Test")
dir.Delete (True)
%>

حذف يک فايل

براي حذف يک فايل مي توان از متدهاي File.Delete و يا FileInfo.Delete ، استفاده نمود . کد زير نحوه انجام اين کار را نشان مي دهد :

حذف يک فايل

<%@ Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%
File.Delete("C:\Test.txt")
Dim file1 As FileInfo
file1 = New FileInfo("C:\Test.txt")
file1.Delete 
%>

توضيحات

در صورتي که قصد حذف فايلي را داشته باشيم که موجود نمي باشد ، با يک خطاء و يا exception خاصي برخورد نخواهيم کرد، مگر اين که بخشي از آدرس مشخص شده در مسير ( Pathname ) وجود نداشته باشد . در چنين مواردي با خطائي از نوع DirectoryNotFoundException مواجه خواهيم شد .

خصلت ها و صفات فايل ها و دايرکتوري ها

توضيحات

Read/ Write

نوع

 نام

 صفاتي نظير Hidden، archiveو Read-only  ، مرتبط با يک فايل را برمي گرداند .

R/ W

FileAttributes

Attributes

زمان ايجاد فايل و يا دايرکتوري را برمي گرداند

R / W

System.DateTime

CreationTime

آخرين زمان مراجعه به فايل و يا دايرکتوري را برمي گرداند

R/ W

System.DateTime

LastAccessTime

آخرين زمان ويرايش يک فايل و يا دايرکتوري را برمي گرداند

R/ W

System.DateTime

LastWriteTime

وضعيت موجود بودن يک فايل و يا دايرکتوري را مشخص مي نمايد.

R

Boolean

Exists

انشعاب فايل و يا دايرکتوري را برمي گرداند ( به همراه نقطه). براي يک  دايرکتوري،انشعاب متن موجود پس از آخرين نقطه  در نام است .

R

String

Extension

 نام فايل و يا دايرکتوري را متناسب با نام دايرکتوري مربوطه بر مي گرداند .

R

String

Name

نام کامل فايل و يا دايرکتوري را برمي گرداند .

R

String

FullName

متدهاي کلاس FileSystemInfo

توضيحات

 نام

حذف فايل و يا دايرکتوري

Delete

بهنگام سازي هر نوع اطلاعات cacheشده( نظير تاريخ ايجاد فايل)

Refresh

وضعيت موجود بودن يک فايل و يا دايرکتوري را مشخص مي نمايد.

Exists

مثال : ايجاد يک مرورگر فايل و دايرکتوري

براي آشنائي با نحوه استفاده ازصفات و برخي متدها و خصلت هاي کلاس هاي DirectoryInfo و FileInfo به بررسي يک مثال کاربردي ( ايجاد يک مرورگر فايل ) ، خواهيم پرداخت . برنامه فوق يک مسير(PathName ) را از ورودي دريافت و تمامي فايل ها و دايرکتوري ها موجود در آن را نمايش خواهد داد .
مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر

ايجاد يک مرورگر فايل و دايرکتوري

<%@ Import Namespace="System.IO" %>

<script runat="server">
Sub Page_Load( sender as object, e as EventArgs)
    if not Request("dir") is nothing then
        DirName.Value = Request("dir")
   end if
End Sub
</script>

<Html dir="rtl">
<font face="Tahoma" size="3">
<h3>مرورگر فايل و دايرکتوري</h3></Font>
</html>

<form runat="server" dir="rtl">
نام دايرکتوري<input type="text" id="DirName" size="20" dir="ltr"
value="c:\program files\internet explorer" runat="server" >
<input type="submit" value="مشاهده">
</form>

<%
dim dir as DirectoryInfo
dim anchor as string

' Get the information about the selected directory

dir = new DirectoryInfo( DirName.Value )

Response.Write("<h4>دايرکتوري هاي موجود در" & DirName.Value & "</h4>")

Response.Write("<table>")
Response.Write("<tr bgcolor=""#336699"" style=""border-collapse: collapse; color: #ffffff"">")
Response.Write("<td>")
Response.Write( "نام" )
Response.Write("<td>")
Response.Write( "تاريخ آخرين تغييرات" )
Response.Write("</tr></font>")

dim SubDir as DirectoryInfo

for each SubDir in dir.GetDirectories()
  anchor = "<a href='" & "FileBrowser.aspx?dir=" & SubDir.FullName & "'>" + SubDir.Name & "</a>"
  Response.Write("<tr dir=""ltr"">")
  Response.Write("<td>" & anchor & "</td>" )
  Response.Write("<td>" & SubDir.LastWriteTime & "</td>" )
  Response.Write("</tr>")
next

Response.Write("</table>")

if ( not dir.Parent is nothing ) then
anchor = "<a href='" & "FileBrowser.aspx?dir=" & dir.Parent.FullName & "'>" & dir.Parent.FullName & "</a>"
Response.Write("<p>دايرکتوريريشه" & anchor )
end if

Response.Write("<h3>فايل هاي موجوددر" & DirName.Value & "</h3>")

Response.Write("<table>")
Response.Write("<tr bgcolor=""#336699"" style=""border-collapse: collapse; color: #ffffff"">")
Response.Write("<td>نام فايل</td>" )
Response.Write("<td>تاريخ آخرين تغييرات</td>" )
Response.Write("<td>ظرفيت</td>" )
Response.Write("<td>وضعيت فايل</td>" )
Response.Write("</tr>")

dim f as FileInfo
dim mystr As String

for each f in dir.GetFiles()
   Response.Write("<tr dir=""ltr"">")
   Response.Write("<td>" & f.Name )
   Response.Write("<td>" & f.LastWriteTime & "</td>")
   Response.Write("<td>" & f.Length.ToString() & "</td>" )
   if ( (f.Attributes and FileAttributes.ReadOnly) <> 0 ) then
      mystr ="فقط خواندني"
   end if
  if ( (f.Attributes and FileAttributes.Hidden) <> 0 ) then
      mystr ="مخفي"
   end if
   if ( (f.Attributes and FileAttributes.System) <> 0 ) then
       mystr ="سيستم"
   end if
   if ( (f.Attributes and FileAttributes.Archive) <> 0 ) then
       mystr ="آرشيو"
   end if
   Response.Write( "<td>" & mystr & "</td>" )
   Response.Write("</tr>")
next
Response.Write("</table>")
%>

Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image