PDA

View Full Version : سوال: حذف فايل در زمان اجرا



Reza,M
دوشنبه 15 آذر 1389, 16:46 عصر
با خدمت دوستان خوبم
برنامه اي نوشتم كه هنگامي كه اجرا ميشه يك پوشه كنار فايل اجرايي ايجاد ميكنه كه محتواي آن يه عكسي است كه توي PictureBox فرم قرار داره . (البته با استفاده از OpenFileDialog از تو هارد Add ميشه)حال ميخوام در زمان اجرا اين پوشه رو حذف كنم براي حذف هم از كد
System.IO.Directory.Delete(My.Application.Info.Dir ectoryPath & "\Files", True)
استفاده ميكنم ولي خطا ميگيره در ضمن حتي عكس را هم Dispose ميكنم ولي بازم خطا ميگره اما بعد از اينكه فرم را بستم و دوباره اجرا كردم ميتونم حذفش كنم

hossein-khoshseyar
دوشنبه 15 آذر 1389, 18:44 عصر
با سلام
برای پاک کردن پوشه می تونی از دستور
RmDir
هم استفاده کنی
در ضمن برای حذف اضافه و.... یک فایل یا فولدر که در کنار فایل اجرایی قرار داره نیازی نیست که آدرس رو از ابتدا بنویسید
یهنی دستور


RmDir("File")

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

Reza,M
سه شنبه 16 آذر 1389, 23:58 عصر
مرسي دوست عزيز ولي هنوز خطا ميگيره . دايركتوري رو پيدا نمي كنه !

با دستور حذف خودم به خط زير خطا ميگيره :

a.Save(My.Application.Info.DirectoryPath & "\Files\img.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

Saman_12
چهارشنبه 17 آذر 1389, 13:02 عصر
دلیلش اینه که عکس توسط پیکچر باکس ا ستفاده میشه(یعنی یک برنامه از عکس داره استفاده میکنه که اینجا برنامه شما هست!)

اگر عکس رو با متد Load خود پیکچر باکس لود کنید مشکل حل میشه.

Reza,M
پنج شنبه 18 آذر 1389, 13:05 عصر
دلیلش اینه که عکس توسط پیکچر باکس ا ستفاده میشه(یعنی یک برنامه از عکس داره استفاده میکنه که اینجا برنامه شما هست!)

اگر عکس رو با متد Load خود پیکچر باکس لود کنید مشکل حل میشه.

بازم مشكلم حل نشد
آخه برنامه من اينطوريه كه يه عكس از كاربر ميگيره بعد اونو تيكه تيكه ميكنه ( مانند پازل ) و نشون ميده سپس وقتي ميخواي عكس ديگه رو انتخاب كني به همون خط كه در بالا گفتم خطا ميگيره البته اينم بگم كه عكس هاي تيكه شده رو تو همان پوشه كنار فايل اجرايي ميندازه در ضمن من از شي پيكچر باكس استفاده نكردم و در واقع يك نوع پيكجر باكس در برنامه تعريف كردم
پس مشكلم دوتا شد 1.حذف اون پوشه كنار فايل اجرايي. 2.انتخاب دوباره عكس به نحوي كه خطا نگيره و نياز نباشه فرم را ببندم و دوباره اجرا كنم.
خودم فكر ميكنم ريشه هر دو مشكل يك چيزه ولي نتونستم رفعش كنم

Reza,M
جمعه 19 آذر 1389, 16:26 عصر
كسي نميتونه مشكل منو حل كنه !:ناراحت::اشتباه:

Rezahak
جمعه 19 آذر 1389, 17:40 عصر
سلام دوست عزیز اول خاصیت image را برای picturebox برابر nothing قرار بده یعنی :
pb.image= nothing برای اطمینان یکبار هم application.doevents بکن بعد کد حذف فولدر را بنویس

Reza,M
شنبه 20 آذر 1389, 00:57 صبح
سلام Rezahak مرسي ; ولي بازم مشكلم حل نشد :عصبانی:
حالا اينو ميشه يه كاري كرد ولي مشكل دومم يعني ( انتخاب دوباره عكس به نحوي كه خطا نگيره و نياز نباشه فرم را ببندم و دوباره اجرا كنم ) برام مهمتره :عصبانی++:

Rezahak
شنبه 20 آذر 1389, 08:22 صبح
ممکنه کدت رو ضمیمه کنی تا برات اصلاح کنیم بفرستیم با این چیزهایی که نوشتی یه جورایی ممکنه یه جایی یه اشتباهی کرده باشی

Reza,M
شنبه 20 آذر 1389, 15:58 عصر
بفرما دوست عزيز اينم يه نمونه :

Rezahak
شنبه 20 آذر 1389, 21:09 عصر
دوست عزیز من کدتون را اصلاح کردم و دوباره برگردوندمش . البته من پروژه را با vs.net 2008 باز کردم برای همین کد Form1 را کامل براتون می گذارم شاید نتونید بازش کنید . البته کدتون هموز جا برای بهتر شدن داره . موفق باشید .

Imports System.Drawing
Public Class Form1

Dim click, win As Boolean
Dim img As Image
Dim LBL(100) As Label
Dim i, id, X, Y, X1, Y1, W, H, index, a, tmp, curent As Integer
Dim path As String
Dim j As Integer
Dim frm2 As New Form2

Public Function random() As Integer
Randomize()
Return Rnd() * a
End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Hide()
Label2.Hide()
If Not System.IO.Directory.Exists(My.Application.Info.Dir ectoryPath & "\Files") Then
System.IO.Directory.CreateDirectory(My.Application .Info.DirectoryPath & "\Files")
End If
OpenFileDialog1.Filter = "Image Files (bmp . jpg . gif . tif) |*.BMP;*.JPG;*.GIF;*.tif"
OpenFileDialog1.FileName = ""
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Try
Dim fs As IO.FileStream

a = NumericUpDown2.Value * NumericUpDown1.Value

For i = 0 To a
Me.Controls.Remove(LBL(i))
Next
Dim img As Image
X = 0
Y = 0
id = 0
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
path = OpenFileDialog1.FileName
fs = New IO.FileStream(path, IO.FileMode.Open, IO.FileAccess.Read)
Using bmp1 = System.Drawing.Image.FromStream(fs)
If bmp1.Width > 600 And bmp1.Height > 450 Then
img = resize(bmp1, 600, 450)
ElseIf bmp1.Width > 600 Then
img = resize(bmp1, 600, bmp1.Height)
ElseIf bmp1.Height > 450 Then
img = resize(bmp1, bmp1.Width, 450)

Else
frm2.BackgroundImage = System.Drawing.Image.FromStream(fs)
img = bmp1
End If

W = img.Width / NumericUpDown1.Value
H = img.Height / NumericUpDown2.Value

For i = 1 To NumericUpDown1.Value
For j = 1 To NumericUpDown2.Value
LBL(id) = New Label
LBL(id).Width = W + 3
LBL(id).Height = H + 3
LBL(id).BackColor = Color.White
LBL(id).Text = id
LBL(id).Cursor = Cursors.Hand
LBL(id).Font = New Font("tahoma", 1, FontStyle.Italic)
Me.Controls.Add(LBL(id))
LBL(id).Location = New Point(X + 100, Y + 3)
'
Using bmp2 As New System.Drawing.Bitmap(W, H), gdi As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmp2)
gdi.DrawImage(img, New System.Drawing.Rectangle(0, 0, W, H), New System.Drawing.Rectangle(X, Y, W, H), System.Drawing.GraphicsUnit.Pixel)
bmp2.Save(My.Application.Info.DirectoryPath & "\Files\" & id.ToString & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
End Using
'
If (id + 1) Mod NumericUpDown1.Value = 0 Then
X = 0
Y = Y + H
Else
X = X + W
End If
AddHandler LBL(id).Click, AddressOf lbl_Click
id = id + 1
Next
Next
End Using
fs.Close()

Dim arry(a - 1) As String
For i = 0 To a - 1
index = random()
For j = 0 To a - 1
If arry(j) = index Then
j = -1
index = random()
ElseIf arry(j) = "" Then
arry(j) = index
Exit For
End If
Next
Next

For i = 0 To a - 1
LBL(i).Tag = (Val(arry(i)) - 1)
fs = New IO.FileStream(My.Application.Info.DirectoryPath & "\Files\" & (Val(arry(i)) - 1).ToString & ".jpg", IO.FileMode.Open, IO.FileAccess.Read)
LBL(i).Image = System.Drawing.Image.FromStream(fs)
fs.Close()
Next
End If
id = 0
index = 0
'Catch ex As Exception
'MessageBox.Show(" ايـن فـايـل قـابـل پـخـش نـمـي بـاشـد لـطـفـا عـكـس ديـگـري را انـتـخـاب كـنـيـد ", " Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
'End Try
End Sub

Dim lable As New Label
Public Shadows Function resize(ByVal img As Image, ByVal w As Integer, ByVal h As Integer) As Image
Dim fs As IO.FileStream

Using bmp2 As New System.Drawing.Bitmap(img, New System.Drawing.Size(w, h))
bmp2.Save(My.Application.Info.DirectoryPath & "\Files\img.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) ' براي انتخاب دوباره عكس به خط خطا ميگيره
fs = New IO.FileStream(My.Application.Info.DirectoryPath & "\Files\img.jpg", IO.FileMode.Open, IO.FileAccess.Read)
frm2.BackgroundImage = System.Drawing.Image.FromStream(fs)
fs.Close()
Return frm2.BackgroundImage
End Using
End Function

Protected Sub lbl_Click(ByVal sender As Object, ByVal e As System.EventArgs)
lable = CType(sender, Label)
index = Val(lable.Text)
If Click = True Then
LBL(curent).BackColor = Color.White
LBL(curent).Image = LBL(index).Image
LBL(curent).Tag = LBL(index).Tag
LBL(index).Image = img
LBL(index).Tag = tmp
Label1.Text += 1
Timer1.Enabled = True
Click = False
For i = 0 To a - 1
If LBL(i).Tag = i Then
win = True

Else
win = False
Exit For

End If
Next

If win = True Then
Form2.Close()
Timer1.Enabled = False
MessageBox.Show(" ! ايـن پــازل در مـدت زمـان " & Label2.Text & " ثـانـيـه بــا مـوفـقـيـت تـكـمـيـل شــد " & vbCrLf & _
"" & vbCrLf & _
" تعداد مراحل = " & Label1.Text, " Success ", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)

Label2.Text = 0
Me.Controls.Remove(LBL(i))
End If
Else
LBL(index).BackColor = Color.Blue
img = LBL(index).Image
tmp = LBL(index).Tag
Click = True
End If
curent = index
End Sub

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
X = e.X
Y = e.Y
Me.Cursor = Cursors.SizeAll
End Sub

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
Me.Cursor = Cursors.Default
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

' از كنار فايل اجرايي حذف بشه بعد فرم بسته شه ولي خطا ميگيره Files ميخوام ابتدا پوشه
System.IO.Directory.Delete(My.Application.Info.Dir ectoryPath & "\Files", True)
End
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
frm2.Show()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Label2.Text += 1
End Sub
End Class

Reza,M
یک شنبه 21 آذر 1389, 12:36 عصر
دوست عزيز تشكر اندر تشكر اندر تشكر . . . . ! به عبارتي تشكر فاكتوريل :قلب: