作者:朱金灿
来源:http://blog.csdn.net/clever101
最近编写一个JScript,在调用FileSystemObject.CopyFile发生没有权限的错误,具体如下图:
开始觉得这个错误挺诡异的,因为我是以管理员身份运行这个js的,怎么会没有权限呢?上网搜索了很多信息也没有找到答案。最后查了下MSDN,发现被错误信息误导了。MSDN是这样说的:
CopyFile Method
See Also
Copy Method| CopyFolderMethod | CreateTextFileMethod | DeleteFileMethod | MoveFileMethod
Applies To: FileSystemObjectObject
Language
- JScript
- VBScript
- Show All
Copies one or more files from one location to another.
object.CopyFile ( source, destination[, overwrite] )
Arguments
object
Required. The objectis always the name of a FileSystemObject.
source
Required.Character string file specification, which can include wildcard characters, forone or more files to be copied.
destination
Required.Character string destination where the file or files from source are tobe copied. Wildcard characters are not allowed.
overwrite
Optional.Boolean value that indicates if existing files are to be overwritten. If true,files are overwritten; if false, they are not. The default is true.Note that CopyFile will fail if destination has the read-onlyattribute set, regardless of the value of overwrite.
Remarks
Wildcard characters can only be used in the last pathcomponent of the source argument. For example, you can use:
[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile ("c:\\mydocuments\\letters\\*
.doc", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"
But you cannot use:
[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile ("c:\\mydocuments\\*
\\R1???97.xls", "c:\\tempfolder")
[VBScript]
FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"
If source contains wildcard characters or destinationends with a path separator (\), it is assumed that destination is anexisting folder in which to copy matching files. Otherwise, destinationis assumed to be the name of a file to create. In either case, three things canhappen when an individual file is copied.
- If destination does not exist, source gets copied. This is the usual case.
- If destination is an existing file, an error occurs if overwrite is false. Otherwise, an attempt is made to copy source over the existing file.
- If destination is a directory, an error occurs.
An error also occurs if a source using wildcardcharacters doesn't match any files. The CopyFile method stops on thefirst error it encounters. No attempt is made to roll back or undo any changesmade before an error occurs.
FileSystemObject.CopyFile("C:\\src\\1.cpp","D:\\MyProject");
实际上这是错误的,只能写成这样:
FileSystemObject.CopyFile("C:\\src\\1.cpp","D:\\MyProject\\1.cpp");
如果你想把src目录下所有cpp文件拷贝到D:\\MyProject目录下,可以这样写:
FileSystemObject.CopyFile("C:\\src\\*.cpp","D:\\MyProject");
看来以后遇到这样的问题第一步应该先查MSDN,不过微软的“没有权限”的错误提示也太坑爹了!
参考文献:
1. javascript 操作文件实现方法小结