如何判断文件是否已完成在驱动器上发布

时间:2014-07-25 21:55:57

标签: windows

我有一些代码可以告诉我文件是否存在于驱动器上,但不知道该文件是否已完成发布到其所在的目录中。所以,当我使用代码告诉我它是否存在以及什么大小,它会告诉我它存在并给我一个特定的大小,但在第二次运行它时,我得到一个不同的文件大小答案,因为文件仍在发布,数据正在发布到它,导致它增长大小。

那么,无论如何要判断文件是否已完成发布?我可以使用的文件的任何属性。另请注意,有人建议将VBA与Windows API一起使用。我在网上做了检查,但似乎没有任何特定于我的需求。任何帮助表示赞赏!

我正在使用VBA,这里是我提供的代码,它提供了我上面提到的数据。此外,此时,我不知道部门使用了哪些进程。生成这些文件。希望我不需要知道是否有办法在没有这些信息的情况下获得我需要的东西!谢谢你的帮助!

Public Sub sub_chk_files2()

    Dim obj_fs As Object
    Dim obj_folder As Object
    Dim obj_files As Object
    Dim obj_f1 As Object
    Dim str_fp As String
    Dim str_fqfp As String
    Dim int_count_files As Integer
    Dim str_import_file_name As String
    Dim lng_file_size As Long

    str_fp = "C:\01_reporting\"

    Set obj_fs = CreateObject("scripting.filesystemobject")
    Set obj_folder = obj_fs.getfolder(str_fp)
    Set obj_files = obj_folder.files

    For Each obj_f1 In obj_files


        If obj_f1.Name = "data2.csv" Then

            str_import_file_name = obj_f1.Name
            str_fqfp = str_fp & str_import_file_name
            lng_file_size = FileLen(str_fqfp) / 1000

            MsgBox "File " & str_import_file_name & " was created on " & obj_f1.DateCreated & " File size = " & lng_file_size & " File Modified on " & obj_f1.DatelastModified

    End If
Next

End Sub

1 个答案:

答案 0 :(得分:0)

您可能无法在Google上找到答案,因为您使用了不常用的字词。

文件不会发布"发布"到磁盘。进程写入文件。

找出另一个进程是否正在写入它的最简单方法是获取独占写访问权。 Windows具有强制锁定功能。因此,如果另一个进程正在编写,CreateFile(..., GENERIC_WRITE, FILE_SHARE_READ, )将不会成功,但如果另一个进程只是在阅读,它就会成功。