FileSystemObject MoveFile 似乎不一致并且在移动某些文件而不是其他文件时有效

FileSystemObject MoveFile seems inconsistent and works when moving some files while not others

我在使用 MoveFile 尝试移动 ppt 文件而不是 pptx 文件时遇到错误,但相反。在此示例代码中,我将文件从 files_temp 文件夹移动到文件夹(不包括文件夹创建代码)。

Set theForm = Server.CreateObject("ABCUpload4.XForm")
theForm.MaxUploadSize = 5242880
theForm.Overwrite = True
Set theField = theForm.Files("filefield")

f_name = Trim(UCase(theField.FileName))
f_type = Trim(UCase(theField.FileType))

'=================================================================
' Overwrite ppt/pptx file if exists else move from temp to save folder
'=================================================================
Dim file_type_array1 = Array("pptx", "ppt")
Dim file_type_exists1 = false

temp_file_path = Trim(Request.ServerVariables("APPL_PHYSICAL_PATH")) & "files_temp\" & f_name & "." & f_type
save_file_path = Trim(Request.ServerVariables("APPL_PHYSICAL_PATH")) & "files\" & "new_file_name." & f_type

'save_file_path w/o extension (used to loop through all extensions)
save_file_path_ne = Trim(Request.ServerVariables("APPL_PHYSICAL_PATH")) & "files\" & "new_file_name."

Set fsobject = Server.CreateObject("Scripting.FileSystemObject")
For x = 0 To UBound(file_type_array1)
    If fsobject.FileExists(save_file_path_ne & file_type_array1(x)) then
        fsobject.DeleteFile(save_file_path_ne & file_type_array1(x))
        fsobject.MoveFile temp_file_path, save_file_path
        file_type_exists1 = true
    End If
Next
If file_type_exists1 = false Then
    fsobject.MoveFile temp_file_path, save_file_path
End If
set fsobject = nothing
file_type_exists1 = false

此代码有效的情况:

  1. 第一次上传文件(pptx 或 ppt)- 正确地从“files_temp”移动到“文件”文件夹
  2. ppt 文件被 pptx 文件覆盖 - ppt 文件被正确删除,pptx 文件从“files_temp”移动到“files”文件夹

此代码不起作用的情况:

  1. pptx 文件 尝试 被 ppt 文件覆盖 - pptx 文件被正确删除,文件从“files_temp”文件夹中取出,然后 MoveFile 出错功能:

Microsoft VBScript 运行时错误“800a0035” 找不到文件

我没有包含所有代码,但应该足以解决这个问题。如果您需要提供额外的代码,请告诉我。还为此示例重写了我现有的代码,因此出现语法错误的可能性很小。

我没有弄清楚我遇到这些问题的确切原因,但我有一个解决方法。我没有使用 MoveFile 移动并同时重命名临时文件,而是不得不将其分为两个步骤。我必须先使用 CopyFile 将文件从 temp_file_path 复制到 save_file_path,然后更改 save_file_path.

中的文件名

修改后的代码:

'save_file_path but with original file name
save_file_path_o = Trim(Request.ServerVariables("APPL_PHYSICAL_PATH")) & "files\" & f_name & "." & f_type

Set fsobject = Server.CreateObject("Scripting.FileSystemObject")
For x = 0 To UBound(file_type_array1)
If fsobject.FileExists(save_file_path_ne & file_type_array1(x)) then
    fsobject.DeleteFile(save_file_path_ne & file_type_array1(x))
    fsobject.CopyFile temp_file_path, save_file_path_o
    Set objFile = fsobject.GetFile(save_file_path_o)
    objFile.Name = save_file_name
    file_type_exists1 = true
End If
Next
If file_type_exists1 = false Then
    fsobject.MoveFile temp_file_path, save_file_path
End If
set fsobject = nothing
set objFile = nothing
file_type_exists1 = false