none
判斷檔案是否被讀取 RRS feed

  • 問題

  • 想請問一下,目前使用try去看檔案是否有被讀取,

                Try
                    Variable.ReadIO = File.OpenRead(Variable.Mcu_Save_CSV_File)
                Catch Have_Read As System.IO.IOException
                     MsgBox("目前檔案被開啟,請關閉檔案後再試", 0)
                    Exit Sub
                End Try

    那想請問該如何一直Try到使用者把檔案關閉再繼續呢?



    • 已編輯 FangDi 2017年2月16日 上午 09:05
    2017年2月16日 上午 09:04

解答

  • ?????
    • 已標示為解答 FangDi 2017年2月17日 上午 12:55
    • 已編輯 [-] 2018年1月11日 上午 11:57
    2017年2月16日 下午 02:31
  • Sub Main()
        Dim IsError = True
        While IsError
            Try
                Variable.ReadIO = File.OpenRead(Variable.Mcu_Save_CSV_File)
                IsError = False
            Catch Have_Read As System.IO.IOException
                MsgBox("目前檔案被開啟,請關閉檔案後再試", 0)
            End Try
        End While
    End Sub

    感謝,我就是在找要怎麼判斷錯誤,讓迴圈一直跑

    目前發現會有路徑與檔案不存在,跟檔案被開啟的狀態,已修正完成放在這裡當作紀錄

            Dim IsError = True
            Dim ReadIO As FileStream
            Dim Mcu_Save_CSV_File As String = "Read/Data/123.csv"
            While IsError
                Try
                    ReadIO = File.OpenRead(Mcu_Save_CSV_File)       '/開啟檔案等待有無錯誤訊息
                    IsError = False                                 '/預設沒有錯誤狀態
                Catch Have_Read As System.IO.IOException
                    '/讀取Have_Read.GetType.ToString目前狀態
                    '/當出現System.IO.FileNotFoundException為檔案路徑不存在
                    '/當出現System.IO.IOException為檔案被占用
                    If Have_Read.GetType.ToString = "System.IO.FileNotFoundException" Then
                        File.Create(Mcu_Save_CSV_File).Dispose()
                        FileClose()
                    Else
                        MsgBox("目前檔案被開啟,請關閉檔案後再試", 0)
                    End If
    
                    'MsgBox(Have_Read.GetType.ToString, 0)
                End Try
            End While
            ReadIO.Close()  '/關閉開啟的檔案


    • 已標示為解答 FangDi 2017年2月17日 上午 12:55
    2017年2月17日 上午 12:55

所有回覆

  • 看起來應該是設定一個flag 然後跑一個迴圈去執行的你那段程式碼。

    如果執行的時候,沒有被catch 就是沒有被讀取,如果有,就是目前被開啟。


    2017年2月16日 上午 09:13
  • 2017年2月16日 下午 02:01
  • ?????
    • 已標示為解答 FangDi 2017年2月17日 上午 12:55
    • 已編輯 [-] 2018年1月11日 上午 11:57
    2017年2月16日 下午 02:31
  • Sub Main()
        Dim IsError = True
        While IsError
            Try
                Variable.ReadIO = File.OpenRead(Variable.Mcu_Save_CSV_File)
                IsError = False
            Catch Have_Read As System.IO.IOException
                MsgBox("目前檔案被開啟,請關閉檔案後再試", 0)
            End Try
        End While
    End Sub

    感謝,我就是在找要怎麼判斷錯誤,讓迴圈一直跑

    目前發現會有路徑與檔案不存在,跟檔案被開啟的狀態,已修正完成放在這裡當作紀錄

            Dim IsError = True
            Dim ReadIO As FileStream
            Dim Mcu_Save_CSV_File As String = "Read/Data/123.csv"
            While IsError
                Try
                    ReadIO = File.OpenRead(Mcu_Save_CSV_File)       '/開啟檔案等待有無錯誤訊息
                    IsError = False                                 '/預設沒有錯誤狀態
                Catch Have_Read As System.IO.IOException
                    '/讀取Have_Read.GetType.ToString目前狀態
                    '/當出現System.IO.FileNotFoundException為檔案路徑不存在
                    '/當出現System.IO.IOException為檔案被占用
                    If Have_Read.GetType.ToString = "System.IO.FileNotFoundException" Then
                        File.Create(Mcu_Save_CSV_File).Dispose()
                        FileClose()
                    Else
                        MsgBox("目前檔案被開啟,請關閉檔案後再試", 0)
                    End If
    
                    'MsgBox(Have_Read.GetType.ToString, 0)
                End Try
            End While
            ReadIO.Close()  '/關閉開啟的檔案


    • 已標示為解答 FangDi 2017年2月17日 上午 12:55
    2017年2月17日 上午 12:55