PDA

View Full Version : وجود یا عدم وجود چند فایل در کنار برنامه



rezapassword
شنبه 23 شهریور 1387, 13:24 عصر
سلام
دوستان کدی رو احتیاج دارم که بتون با هم مثلا وجود 20 فایل رو در کنار برنامه چک کنه !
ممنون و سپاس فراوان

Evil 69
شنبه 23 شهریور 1387, 13:38 عصر
سوال مبهمي كردي منظورت اينه كه چك كني يك سري فايل در يك جا هست يا نه ؟
اگه منظورت اينه مي توني از كلاس fileinfo استفاده كني و يا اين كه از fso استفاده كني كه راحت تر هم هست

rezapassword
شنبه 23 شهریور 1387, 14:12 عصر
نه مثلا میخوام چک کنم که 10 تا DLL در کنار برنامه هستند یا نه
مثلا
a.dll
b.dll اینها باشن
ممنون

Morteza_s
شنبه 23 شهریور 1387, 15:11 عصر
If (System.IO.File.Exists(System.Windows.Forms.Applic ation.StartupPath & "\a.dll")) Then
'دستورات
End If


برای کد نویسی کمتر هم می تونی نام فایل ها رو از 1 تا 20 قرار بدی و به این صورت عمل کنی


For i = 1 To 20
If (System.IO.File.Exists(System.Windows.Forms.Applic ation.StartupPath & "\" & i & ".dll")) Then
'دستورات
End If
Next

rezapassword
شنبه 23 شهریور 1387, 15:34 عصر
نه این راه عملی نیست
کدی باید باشه که همه رو هم زمان چک کن

reza6384
شنبه 23 شهریور 1387, 22:06 عصر
نه این راه عملی نیست
کدی باید باشه که همه رو هم زمان چک کن

چرا باید همزمان چک بشه؟ کلا اجرای این حلقه 20 تایی فکر نمی کنم به کسری از ثانیه برسه. یعنی شما میگین ممکنه تا یکی رو چک می کنه فایل دیگه ای اتفاقی براش بیفته؟

فکر نمی کنم توی .Net امکانی برای برنامه همروند باشه، ولی توی برنامه های همروند که با یه Simulator می نوشتیم یه دستوری داشت به نام ForAll که به صورت موازی حلقه رو اجرا می کرد. اما اینجا رو نمی دونم.

mostafaaa
شنبه 23 شهریور 1387, 22:39 عصر
از این هم میتونی استفاده کنی

For Each Item As String In IO.Directory.GetFiles("C:\")
If Strings.Right(Item, 3) = "dll" Then
MsgBox(Item)
End If
Next

rezapassword
یک شنبه 24 شهریور 1387, 09:46 صبح
نه مصتفی جان نشد !
رضا جان فرمایشون متین
اما من این طوریش رو لازم ندارم

mostafaaa
دوشنبه 25 شهریور 1387, 11:35 صبح
اگه یه خورده بیشتر توضیح بدی که دقیقا چی میخای و اینکه کجا میخای ازش استفاده کنی. شاید بتونیم بهت کمک کنیم.

rezapassword
دوشنبه 25 شهریور 1387, 12:45 عصر
سلام
میخوام زمانی که برنامه اغاز شد ( قبل از شروع فرم ) وجود یک سری فایل رو در کنار خودش چک کنه
مثلا
news.text
vistaprogressbar.dll
securityclass.dll
و...
حدودا 20 فایل
که در صورت نبود هر کدام برنامه اجرا نشه
من بریا یک فایل از
System.IO.File.Exists(Application.StartupPath + "\a.txt")
استفاده میکنم
حالا چه طور از این برای 20 فایل استفاده کنم ؟

mostafaaa
دوشنبه 25 شهریور 1387, 21:09 عصر
خوب شما اول باید یه لیست از فایلهایی رو که میخواهید چک بشه تهیه کنید مثل این.

Dim ListOfFiles(2) As String
ListOfFiles(0) = "news.text"
ListOfFiles(1) = "vistaprogressbar.dll"
ListOfFiles(2) = "securityclass.dll"

بعد هم با استفاده از یه متد مثل متد پایین عدم وجود فایلهاتون رو چک کنید.

Function FileExists(ByVal FileList() As String, ByVal Path As String) As Boolean
Dim Count As Integer = FileList.Length
For i As Integer = 0 To Count - 1
If System.IO.File.Exists(Path & FileList(i)) = False Then
MessageBox.Show(FileList(i) & " Not exist in Directory", "Error")
Return False
End If
Next
Return True
End Function

rezapassword
سه شنبه 26 شهریور 1387, 10:20 صبح
دوست گلم میشه بگی از اینا کجا استفاده کنم

mostafaaa
سه شنبه 26 شهریور 1387, 11:43 صبح
خوب از اونجایی که میخای قبل از ساخته شدن فرمت وجود فایلها رو چک کنی باید کدت رو توی ایونت MyApplication_Startup بنویسی و از داخل اون فانکشن FileExist رو فراخوانی کنی. به مثال توجه کن :

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupE ventArgs) Handles Me.Startup
Dim ListOfFiles(2) As String
ListOfFiles(0) = "news.text"
ListOfFiles(1) = "vistaprogressbar.dll"
ListOfFiles(2) = "securityclass.dll"
If FileExists(ListOfFiles, "C:\") = False Then
End
End If
End Sub

rezapassword
سه شنبه 26 شهریور 1387, 20:23 عصر
سلام عزیزم
فقط یه سوال دارم
(ListOfFiles, "C:\")

به جای درایو سی چی بنویسم که کنار برنامه رو چک کنه
اپلیشن استارت پچ نشد !!

mostafaaa
سه شنبه 26 شهریور 1387, 20:43 عصر
Dim Path As String = System.IO.Directory.GetCurrentDirectory & "\"

rezapassword
پنج شنبه 28 شهریور 1387, 13:27 عصر
دوست من من توی عمرم نتونستم از این کد استفاده کنم
میشه یه توضیحی بفرمائید

mostafaaa
پنج شنبه 28 شهریور 1387, 20:14 عصر
http://www.nowupload.com/:cgA
امیدوارم این مشکلت رو حل کنه.
هر چی سعی کردم توی سایت آپلود نشد . مجبور شدم جای دیگه آپش کنم

rezapassword
جمعه 29 شهریور 1387, 10:10 صبح
سلام

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ListOfFiles(1) As String
Dim Path As String = System.IO.Directory.GetCurrentDirectory & "\"
ListOfFiles(0) = "news.text"

If FileExists(ListOfFiles, Path) = False Then
End
End If
End Sub

Function FileExists(ByVal FileList() As String, ByVal Path As String) As Boolean
Dim Count As Integer = FileList.Length
For i As Integer = 0 To Count - 1
If System.IO.File.Exists(Path & FileList(i)) = False Then
MessageBox.Show(FileList(i) & " Not exist in Directory", "Error")
Return False
End If
Next
Return True
End Function
End Class
در این کد با وجود اینکه فایل نیوز هست میگه که نیست
مشکل چیه

bardia goharbin
جمعه 29 شهریور 1387, 13:13 عصر
به نظر من روشي که استفاده کرده بودي داراي مشکلاتي براي چک کردن موجوديت فايل ميباشد. لذا کدي که برات گذاشتم رو با کدي که نوشتي جايگزين کن. فقط به پيغامها دقت کن چون مسير و نام فايل رو در صورت موجود بودن يا نبودن فايل به شما نشون ميده که اگر دوست نداشتي اون پيغامها رو ببيني ميتوني اونها رو حذف کني

Imports System.IO

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ListOfFiles(1) As String
Dim Path As String = System.IO.Directory.GetCurrentDirectory & "\"
ListOfFiles(0) = "news.text"

If FileExists(ListOfFiles, Path) = False Then
End
End If
End Sub

Function FileExists(ByVal FileList() As String, ByVal Path As String) As Boolean
Dim Count As Integer = FileList.Length
For i As Integer = 0 To Count - 1
Dim MyFile As New FileInfo(Path + FileList(i))
If MyFile.Exists() = False Then
MessageBox.Show(Path + FileList(i) & " .... Not exist in Directory", "Error")
Return False
Else
MessageBox.Show(Path + FileList(i) & " .... Found")
Return True
End If
Next
End Function

End Class

dady_jabery
جمعه 29 شهریور 1387, 13:47 عصر
شما می تونی از thread ها استفاده کنی به طوری که چند تا thread درست کنی که توی هر کدوم بیاد یک فایل رو چک کنه

rezapassword
جمعه 29 شهریور 1387, 15:35 عصر
دوست من کد شما رو به این تغیر دادم

Imports System.IO
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ListOfFiles(1) As String
Dim Path As String = System.IO.Directory.GetCurrentDirectory & "\"
ListOfFiles(0) = "a.txt"

If FileExists(ListOfFiles, Path) = False Then
End
End If
End Sub

Function FileExists(ByVal FileList() As String, ByVal Path As String) As Boolean
Dim Count As Integer = FileList.Length
For i As Integer = 0 To Count - 1
Dim MyFile As New FileInfo(Path + FileList(i))
If MyFile.Exists() = True Then
Me.Show()
Else
MsgBox("a")
End If
Next
End Function

End Class
ولی با اینکه فایل وجود داره
یغام ندارد رو نشون میده
میشه راهنمایی بفرمائید

bardia goharbin
جمعه 29 شهریور 1387, 19:22 عصر
من يه نمونه کد براي شما گذاشتم که اون کد کاملا تست شده بود و جواب ميداد.
شما چرا از کدي که براتون نوشتن استفاده نميکنيد و اونو تغيير ميديد که باز به مشکل ميخوريد. چون اين کدي رو که تغيير داديد مشکل داره.
سعي کن از کدي که برات گذاشتم استفاده کني و از موجوديت فايلت در مسيري که چک ميشه مطمئن باشي. اون کد رو من کاملا تست کردم و جواب داد.

rezapassword
جمعه 29 شهریور 1387, 22:02 عصر
بله
اما نمیخوام اون پیام فایل وجود دارد بیاد
ممنون

bardia goharbin
جمعه 29 شهریور 1387, 22:04 عصر
بله
اما نمیخوام اون پیام فایل وجود دارد بیاد
ممنون

خوب شما همانطور که گفته بودم ميتونيد دستور msgbox رو حذف کنيد. والسلام

rezapassword
شنبه 30 شهریور 1387, 08:25 صبح
خوب اون وقت دیگه کار نمیکنه
خودتون هی چک بکنید
مشکل منم همین جاست

mostafaaa
شنبه 30 شهریور 1387, 09:39 صبح
دوباره سلام
کد دوستمونbardia goharbin رو هم دیدم، میتونم بگم تقریبا با کد من تفاوت عمده ای نداره.
حالا اینکه شما با این کد هم مشکل داری فقط یه چیز به ذهنم میرسه ....
اون اینکه متد FileExist در واقع case sensitive هستش ، یعنی اینکه به حروف بزرگ و کوچیک حساسه و News.txt رو مساوی با news.txt قرار نمیده. این مورد رو هم چک کن شاید مشکلت برطرف بشه.

شما می تونی از thread ها استفاده کنی به طوری که چند تا thread درست کنی که توی هر کدوم بیاد یک فایل رو چک کنه
به نظر نمیرسه استفاده از Thread ها واسه یه همچین کاری منطقی باشه.

rezapassword
شنبه 30 شهریور 1387, 14:16 عصر
نه دوست گلم ببین تو این عکس همه چیز پیداست :
http://i38.tinypic.com/rhpks5.png

bardia goharbin
شنبه 30 شهریور 1387, 15:05 عصر
دوست عزيز چيز ديگري به ذهن من نميرسه متاسفانه. چون من کد خودم را بدون Msgbox هم چک کردم و هيچ مشکلي نداشت. اگر ميتوانيد پروژه خود را ارسال کنيد تا برايتان مشکل آن را حل کرده يا پاسخ دقيقتري ارائه کنيم. واقعا به غير از اينکه فايل شما در مسير چک شده واقعا موجود نباشد به چيز ديگه اي نميشه شک کرد.

rezapassword
شنبه 30 شهریور 1387, 15:56 عصر
میبید که در عکس فایل وجود داره
اما چشم پروژه رو میزارم
http://rapidshare.com/files/146838963/WindowsApplication2.rar.html

bardia goharbin
شنبه 30 شهریور 1387, 16:06 عصر
دوست عزيز من از اول مطمئن بودم که نام فايلي که شما چک ميکني با فايلي که واقعا موجود است متفاوت است. مشکل پيدا شد. به عکس توجه کن. اسم فايل واقعي شما news.txt.txt ميباشد. اگر در Folder Option تيک مربوط به hide extensions for know file types رو برداريد پسوند واقعي فايلهاي شما نمايش داده ميشود و ديگر دچار اين مشکل نخواهيد شد.
اينم عکس راهنماي شما