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
此代码有效的情况:
- 第一次上传文件(pptx 或 ppt)- 正确地从“files_temp”移动到“文件”文件夹
- ppt 文件被 pptx 文件覆盖 - ppt 文件被正确删除,pptx 文件从“files_temp”移动到“files”文件夹
此代码不起作用的情况:
- 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
我在使用 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
此代码有效的情况:
- 第一次上传文件(pptx 或 ppt)- 正确地从“files_temp”移动到“文件”文件夹
- ppt 文件被 pptx 文件覆盖 - ppt 文件被正确删除,pptx 文件从“files_temp”移动到“files”文件夹
此代码不起作用的情况:
- 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