none
[VS.NET]刪除N天前資料夾 RRS feed

  • 一般討論

  • 請問如何用VS.Net 刪除N天前檔案 (第二層)

    .目前希望優化程序

    1.開啟執行與路徑可否透過修改 XML 與 INI的方式 [已解決]
    2.程序執行後 一段時間後自動關閉 (因為要把程序加入系統的工作排程) [換方式測試中]
    3.資料夾如何用流覽的方式[以解決]

    請各位抽空幫幫忙,謝謝!!

    已到處蒐尋參考了部分

    Visual Basic 2010 讀取檔案路徑的檔名
    http://yoou.blogspot.tw/2011/08/visual-basic-2010_14.html

    DateTime.Ticks Property
    http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

    Using LINQ to Search and Delete Old Files
    http://www.devcurry.com/2009/08/using-linq-to-search-and-delete-old.html

    How to loop through folder to delete files and subfolders in ASP.NET
    http://www.devasp.net/net/articles/display/1270.html


    怎樣才能啟動FileSystamWatcher的監聽功能
    http://topic.csdn.net/u/20110425/14/e2eb16b5-c25c-462e-be28-88ae5c643eda.html

    [VB.NET]使用StreamWriter把文字輸出到檔案
    http://www.dotblogs.com.tw/yijyundeng/archive/2012/02/04/67776.aspx

    VB程式怎麼開檔呢?
    http://www.ptt.cc/bbs/Visual_Basic/M.1232779274.A.C69.html

    Imports System
    Imports System.Xml
    
    
    Public Class Form1
    
        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            'My.Settings.BeforeDays = Me.txt_BeforeDays.Text
            'My.Settings.TagFloder = Me.txt_TagFloder.Text
            Save_Settings()
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Me.txt_BeforeDays.Text = My.Settings.BeforeDays
            'Me.txt_TagFloder.Text = My.Settings.TagFloder
            Load_Settings()
    
            ParseCommandLineArgs()
    
            TextBox1.Clear()
            TextBox1.ReadOnly = True
    
            If txt_BeforeDays.Text = "" Then
                check_AutoRun.CheckState = CheckState.Unchecked
                TextBox1.Text = "*** 過期天數不能為空 ***" & vbCrLf
            End If
    
            If txt_TagFloder.Text = "" Then
                check_AutoRun.CheckState = CheckState.Unchecked
                TextBox1.Text = TextBox1.Text & "*** 指定路徑不能為空 ***" & vbCrLf
            End If
    
    
    
    
            If check_AutoRun.Checked = True Then
                Delete_Button.PerformClick()
                Me.Close()
            End If
    
            'Show_Floder()
        End Sub
    
        Private Sub Browser_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browser_Button.Click
            If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
                txt_TagFloder.Text = FolderBrowserDialog1.SelectedPath
                Show_Floder()
            End If
        End Sub
    
        Private Sub Delete_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Delete_Button.Click
            'Dim txt_BeforeDays As String        ' 要刪除幾天前的檔案
            'Dim delFolder = txt_TagFloder       ' 要刪除檔案所在之目錄  
    
            '確認LOG檔案,若無則建立一個檔案
            If IO.File.Exists(Application.StartupPath & "\log-DeleteFloder.txt") = False Then
                IO.File.Create(Application.StartupPath & "\log-DeleteFloder.txt")
            End If
    
            Dim DirInfo As IO.DirectoryInfo
            DirInfo = New IO.DirectoryInfo(txt_TagFloder.Text)
            For Each Floder In DirInfo.GetDirectories("*", IO.SearchOption.TopDirectoryOnly)
                'For Each file In DirInfo.GetFiles("*.jpg", IO.SearchOption.TopDirectoryOnly)  '設定抓檔案(*.jpg)限定在此資料夾下不包含子資料夾  
                For Each SecondFloder In Floder.GetDirectories("*", IO.SearchOption.TopDirectoryOnly)
                    'Dim test1 = (Now - SecondFloder.CreationTime).Days
                    'MsgBox(test1 & " ; " & txt_BeforeDays.Text)
                    If (Now - SecondFloder.CreationTime).Days > txt_BeforeDays.Text Then
                        Dim logfile As System.IO.StreamWriter = New System.IO.StreamWriter(Application.StartupPath & "\log-DeleteFloder.txt", True, System.Text.Encoding.Default)
                        Try
                            SecondFloder.Delete(True) '刪除資料夾
                            '將刪除的檔案與資料夾用以日期為檔案稱存成LOG檔案
                            logfile.WriteLine("DIRs; " & SecondFloder.FullName & "; " & SecondFloder.CreationTime & "; " & "DleteTime: " & Today.ToShortDateString & "  " & Now.ToShortTimeString)
                            logfile.Close()
                        Catch ex As Exception
                            '無法刪除的檔案存成log檔以日期為檔案稱存成LOG檔案
                            Err.Clear()
                            logfile.WriteLine("DIRs; " & "***** ERR ***** " & SecondFloder.FullName & "; " & SecondFloder.CreationTime & "; " & "DleteTime: " & Today.ToShortDateString & "  " & Now.ToShortTimeString)
                            logfile.Close()
                        End Try
                    End If
                Next SecondFloder
    
                For Each SecondFloder_Files In Floder.GetFiles("*.*", IO.SearchOption.TopDirectoryOnly)
                    'Dim test1 = (Now - SecondFloder_Files.CreationTime).Days
                    'MsgBox(test1 & " ; " & txt_BeforeDays.Text)
                    If (Now - SecondFloder_Files.CreationTime).Days > txt_BeforeDays.Text Then
                        Dim logfile As System.IO.StreamWriter = New System.IO.StreamWriter(Application.StartupPath & "\log-DeleteFloder.txt", True, System.Text.Encoding.Default)
                        Try
                            SecondFloder_Files.Delete() '刪除資料夾
                            '將刪除的檔案與資料夾用以日期為檔案稱存成LOG檔案()
                            logfile.WriteLine("FILEs; " & SecondFloder_Files.FullName & "; " & SecondFloder_Files.CreationTime & "; " & "DleteTime: " & Today.ToShortDateString & "  " & Now.ToShortTimeString)
                            logfile.Close()
                        Catch ex As Exception
                            '無法刪除的檔案存成log檔以日期為檔案稱存成LOG檔案
                            Err.Clear()
                            logfile.WriteLine("FILEs; " & "***** ERR ***** " & SecondFloder_Files.FullName & "; " & SecondFloder_Files.CreationTime & "; " & "DleteTime: " & Today.ToShortDateString & "  " & Now.ToShortTimeString)
                            logfile.Close()
                        End Try
                    End If
                Next SecondFloder_Files
    
    
            Next Floder
        End Sub
    
        Sub Show_Floder()
            Dim DirInfo As IO.DirectoryInfo
            DirInfo = New IO.DirectoryInfo(txt_TagFloder.Text)
            TextBox1.Clear()
            TextBox1.ReadOnly = True
            For Each Floder In DirInfo.GetDirectories("*", IO.SearchOption.TopDirectoryOnly)
                TextBox1.ScrollBars = ScrollBars.Vertical ' 設定 TextBox1 的垂直捲軸
                TextBox1.Text = TextBox1.Text & Floder.FullName & vbCrLf
            Next
        End Sub
    
        Sub ParseCommandLineArgs()
            Dim inputArgument As String = "/auto="
            Dim inputName As String = ""
    
            For Each s As String In My.Application.CommandLineArgs
                If s.ToLower.StartsWith(inputArgument) Then
                    inputName = s.Remove(0, inputArgument.Length)
                End If
            Next
    
            If inputName = "yes" Then
                check_AutoRun.CheckState = CheckState.Checked
            Else
                check_AutoRun.CheckState = CheckState.Unchecked
            End If
    
        End Sub
    
        Sub Save_Settings()
            Dim settings As New XmlWriterSettings()
            settings.Indent = True
            Dim XmlWrt As XmlWriter = XmlWriter.Create(Application.StartupPath & "\XMLFile1.xml", settings)
            With XmlWrt
    
                ' Write the Xml declaration.
                .WriteStartDocument()
    
                ' Write a comment.
                .WriteComment("XML Database.")
    
                ' Write the root element.
                .WriteStartElement("DeleteFloder")
    
                ' Start our first person.
                .WriteStartElement("Settings")
    
                ' The person nodes.
    
                .WriteStartElement("BeforeDays")
                .WriteString(txt_BeforeDays.Text.ToString())
                .WriteEndElement()
    
                .WriteStartElement("TagFloder")
                .WriteString(txt_TagFloder.Text.ToString())
                .WriteEndElement()
    
    
                ' The end of this person.
                .WriteEndElement()
    
                ' Close the XmlTextWriter.
                .WriteEndDocument()
                .Close()
    
            End With
        End Sub
    
        Sub Load_Settings()
            Dim doc As New System.Xml.XmlDocument
            doc.Load(Application.StartupPath & "\XMLFile1.xml")
            Dim Load_BeforeDays = doc.GetElementsByTagName("BeforeDays")
            Dim Load_TagFloder = doc.GetElementsByTagName("TagFloder")
            For Each item As System.Xml.XmlElement In Load_BeforeDays
                Console.WriteLine(item.InnerText)
                txt_BeforeDays.Text = item.InnerText
            Next
    
            For Each item As System.Xml.XmlElement In Load_TagFloder
                Console.WriteLine(item.InnerText)
                txt_TagFloder.Text = item.InnerText
            Next
        End Sub
    End Class
    


    • 已編輯 X Z 2012年9月10日 上午 04:46 加入刪除資料夾內檔案,並期待優化
    • 已變更類型 X Z 2012年9月12日 下午 02:26 等待優化
    2012年9月3日 下午 03:36

所有回覆

  • 1. 可以

    2. 用 TreeView 或 ListView 自己做一個


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月4日 上午 05:30
    版主
  • 請問把設定檔拉出來有沒有參考的範例
    我目前翻不到潛顯易懂的

    開發 Windows Forms 程式,想要在關閉程式時儲存控制項狀態,該如何撰寫?
    http://www.dotblogs.com.tw/chou/archive/2011/12/20/62699.aspx

    第二項 我從TreeView 或 ListView 去搜尋看看

    謝謝

    2012年9月4日 上午 05:35
  • 搞定 其中一項了!(瀏覽)
    謝謝!!

    參考:
    瀏覽資料夾對話框 如何弄出來
    http://www.programmer-club.com/showSameTitleN/vbdotnet/13336.html

    設定檔拉出來真的不好找,努力中..更需要一隻手的幫忙

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            FolderBrowserDialog1.ShowDialog()
            txt_TagFloder.Text = FolderBrowserDialog1.SelectedPath
        End Sub



    • 已編輯 X Z 2012年9月4日 上午 05:50 補參考連結
    2012年9月4日 上午 05:48
  • 您好:

    我有找到控制像的儲存位置
    目前找不到相關資料可以把她搬移到和程式同一個知料夾

    Application Settings in VB.NET
    http://visualbasic.about.com/od/usingvbnet/a/appsettings_4.htm

    Where VB.Net My.Settings is Stored
    http://devpinoy.org/blogs/comgen/archive/2006/12/18/where-vb-net-my-settings-is-stored.aspx

    where does the data of my.settings stored?
    http://www.vbforums.com/showthread.php?537110-RESOLVED-where-does-the-data-of-my.settings-stored
     
    Where are My.Settings saved in VB 2010 .NET?
    http://stackoverflow.com/questions/8691858/where-are-my-settings-saved-in-vb-2010-net

     

    2012年9月4日 上午 06:21
  • 目前只剩下兩個問題

    1.

    my.settings 存的路徑太深了

    要如何才能把 user.setting 存放在在和執行檔同一個目錄

    拜託幫幫我...謝謝 我爬文爬好久了

    2.

    執行完畢後自動關閉.

    因為程序會加入工作排程裡面 不能每天執行一次開一次吧

    • 已編輯 X Z 2012年9月4日 下午 03:47
    2012年9月4日 下午 03:35
  • 1) 最簡單的做法是將所要儲存的資料的範圍改成:Application, 不要選User

    2) Process.Start("shutdown", "/s /t 00");

    2012年9月5日 上午 05:30
  • 你有沒有把置頂文的範例看一看?

    關於Visual Basic 資源分享

    INI 的 FAQ

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=INI%20232


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年9月5日 下午 12:41
  • 謝謝

    1.我研究看看怎麼用Application範圍
      測試結果她會說我的 變數是 READONLY 還在找原因

    2.謝謝您 我四處爬文 換個方式做了,不過您的範例我還是會記起來

    我的方式..

    有空的話..抽個空幫我看看 全部的程式碼 哪邊需要改進的.東湊西拼的只能動不能進步

    謝謝

            ParseCommandLineArgs()
    
            TextBox1.Clear()
            TextBox1.ReadOnly = True
    
            If txt_BeforeDays.Text = "" Then
                check_AutoRun.CheckState = CheckState.Unchecked
                TextBox1.Text = "*** 過期天數不能為空 ***" & vbCrLf
            End If
    
            If txt_TagFloder.Text = "" Then
                check_AutoRun.CheckState = CheckState.Unchecked
                TextBox1.Text = TextBox1.Text & "*** 指定路徑不能為空 ***" & vbCrLf
            End If
    
    
            If check_AutoRun.Checked = True Then
                Delete_Button.PerformClick()
                Me.Close()
            End If


    • 已編輯 X Z 2012年9月6日 上午 05:14
    2012年9月6日 上午 04:58
  • Hi~ 置頂文 ..說實話我只看標題 直到剛剛才點進去看內容
    我只知到這邊規局是要努力過..人們才會肯伸出援手..
    就是找了好久找不到才會發問..因為搜尋的時間會比這邊發快效果來的快
    找了一段時間找不到範例我才會來問..然後繼續找
    若是有答案就更新主題 提問新的問題 並分享搜尋的結果
    論壇是網友平等互助..這點我也知道所以問了沒答案只能怪自己.
    問題或是問法不符合到回答者的動機.

    上面那篇搜尋方式我測試過了.
    我試過ini XML portable 存檔路徑 "the same" my.settings My.Application.Info.DirectoryPath ....等
    無法把搜尋到的結果應用出來
    才提問

    謝謝


    2012年9月6日 上午 05:10
  • 你不一定要執著在使用 My.Settings 吧? 只要用一般讀寫文字檔的方式來存取你的自訂設定檔就好了, 這樣你就可以愛擺哪就擺哪啊.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月6日 上午 05:16
    版主
  • 說真的我打從一開始用想到用文字檔

    可是..功力不足努力中!

    搜尋的過程中 看到MY.setting 可以用. 所以就先頂著先

    當弄得出來 我當然改阿

    哈哈!!

    學習中

    Read Write XML File Data In Asp.Net C# VB
    http://csharpdotnetfreak.blogspot.com/2012/06/read-write-xml-file-c-vb-aspnet.html

    convert string to xml and pass it to a stored proc ... - VB.NET Forum
    http://www.dotnetfunda.com/forums/thread4932-convert-string-to-xml-and-pass-it-to-a-stored-proc.aspx

    VB.NET 中TextBox输入提示功能
    http://blog.sina.com.cn/s/blog_7223c1af0100nl74.html

    • 已編輯 X Z 2012年9月6日 下午 04:50 努力ing, 也 等待援手中
    2012年9月6日 上午 10:28
  • 使用 Visual Basic 存取檔案

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月7日 下午 05:23
    版主
  • Bill 版主
    感謝妳伸出援手..不過那篇我領悟不太出來.我目前只能抄抄改改

    經過努力參考了無數篇 這三篇我覺得對初學者比較有用
    Working with XML files part 1 - Writing to XML (Visual Basic)
    http://www.youtube.com/watch?v=ZXmuXrLcAg8&feature=relmfu

    Working with XML files part 2 - Reading XML (Visual Basic)
    http://www.youtube.com/watch?v=TbjsWT2kdgs

    Read XML with VB,NET
    http://www.daniweb.com/software-development/vbnet/threads/255798/read-xml-with-vbnet

    拼湊出以下的東西 大至感覺可能可以用
    全部的程式碼放在一樓.若各位以空可以幫忙修改一下看哪邊可以改進..或是優化

    先感謝各位的協助

    Sub Save_Settings()
            Dim settings As New XmlWriterSettings()
            settings.Indent = True
            Dim XmlWrt As XmlWriter = XmlWriter.Create(Application.StartupPath & "\XMLFile1.xml", settings)
            With XmlWrt
    
                ' Write the Xml declaration.
                .WriteStartDocument()
    
                ' Write a comment.
                .WriteComment("XML Database.")
    
                ' Write the root element.
                .WriteStartElement("DeleteFloder")
    
                ' Start our first person.
                .WriteStartElement("Settings")
    
                ' The person nodes.
    
                .WriteStartElement("BeforeDays")
                .WriteString(txt_BeforeDays.Text.ToString())
                .WriteEndElement()
    
                .WriteStartElement("TagFloder")
                .WriteString(txt_TagFloder.Text.ToString())
                .WriteEndElement()
    
    
                ' The end of this person.
                .WriteEndElement()
    
                ' Close the XmlTextWriter.
                .WriteEndDocument()
                .Close()
    
            End With
        End Sub
    
        Sub Load_Settings()
            Dim doc As New System.Xml.XmlDocument
            doc.Load(Application.StartupPath & "\XMLFile1.xml")
            Dim Load_BeforeDays = doc.GetElementsByTagName("BeforeDays")
            Dim Load_TagFloder = doc.GetElementsByTagName("TagFloder")
            For Each item As System.Xml.XmlElement In Load_BeforeDays
                Console.WriteLine(item.InnerText)
                txt_BeforeDays.Text = item.InnerText
            Next
    
            For Each item As System.Xml.XmlElement In Load_TagFloder
                Console.WriteLine(item.InnerText)
                txt_TagFloder.Text = item.InnerText
            Next
        End Sub
    End Class
    

    2012年9月9日 下午 04:40