关于C#中的文件权限
时间:2020-03-05 18:42:24 来源:igfitidea点击:
在CI中创建文件同步程序时,试图在LocalFileItem类中使用System.IO.File.Copy(destination.Path,Path,true)方法创建一个copy方法,其中Path是一个字符串。 。 用目的地执行此代码后。
Path =" C:\ Test2"和this.Path =" C:\\ Test \\ F1.txt"
我得到一个例外,说我没有在C上执行此操作所需的文件权限:\ Test,但C:\ Test由我本人(当前用户)拥有。
有谁知道发生了什么事,或者如何解决这个问题?
这是完整的原始代码。
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace Diones.Util.IO { /// <summary> /// An object representation of a file or directory. /// </summary> public abstract class FileItem : IComparable { protected String path; public String Path { set { this.path = value; } get { return this.path; } } protected bool isDirectory; public bool IsDirectory { set { this.isDirectory = value; } get { return this.isDirectory; } } /// <summary> /// Delete this fileItem. /// </summary> public abstract void delete(); /// <summary> /// Delete this directory and all of its elements. /// </summary> protected abstract void deleteRecursive(); /// <summary> /// Copy this fileItem to the destination directory. /// </summary> public abstract void copy(FileItem fileD); /// <summary> /// Copy this directory and all of its elements /// to the destination directory. /// </summary> protected abstract void copyRecursive(FileItem fileD); /// <summary> /// Creates a FileItem from a string path. /// </summary> /// <param name="path"></param> public FileItem(String path) { Path = path; if (path.EndsWith("\") || path.EndsWith("/")) IsDirectory = true; else IsDirectory = false; } /// <summary> /// Creates a FileItem from a FileSource directory. /// </summary> /// <param name="directory"></param> public FileItem(FileSource directory) { Path = directory.Path; } public override String ToString() { return Path; } public abstract int CompareTo(object b); } /// <summary> /// A file or directory on the hard disk /// </summary> public class LocalFileItem : FileItem { public override void delete() { if (!IsDirectory) File.Delete(this.Path); else deleteRecursive(); } protected override void deleteRecursive() { Directory.Delete(Path, true); } public override void copy(FileItem destination) { if (!IsDirectory) File.Copy(destination.Path, Path, true); else copyRecursive(destination); } protected override void copyRecursive(FileItem destination) { Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory( Path, destination.Path, true); } /// <summary> /// Create's a LocalFileItem from a string path /// </summary> /// <param name="path"></param> public LocalFileItem(String path) : base(path) { } /// <summary> /// Creates a LocalFileItem from a FileSource path /// </summary> /// <param name="path"></param> public LocalFileItem(FileSource path) : base(path) { } public override int CompareTo(object obj) { if (obj is FileItem) { FileItem fi = (FileItem)obj; if (File.GetCreationTime(this.Path).CompareTo (File.GetCreationTime(fi.Path)) > 0) return 1; else if (File.GetCreationTime(this.Path).CompareTo (File.GetCreationTime(fi.Path)) < 0) return -1; else { if (File.GetLastWriteTime(this.Path).CompareTo (File.GetLastWriteTime(fi.Path)) < 0) return -1; else if (File.GetLastWriteTime(this.Path).CompareTo (File.GetLastWriteTime(fi.Path)) > 0) return 1; else return 0; } } else throw new ArgumentException("obj isn't a FileItem"); } } }
解决方案
回答
似乎我们将参数放置在File.Copy()中,它应该是File.Copy(字符串源,字符串目标)。
还是" C:\ Test2"目录吗?我们无法将文件复制到目录。
使用类似的东西:
File.Copy( sourceFile, Path.Combine(destinationDir,Path.GetFileName(sourceFile)) )
;
回答
我在这里有点猜测,但这可能是因为:
- 我们正在尝试在C:根目录下执行文件操作? (如果我们使用的是Vista,可能对此有所保护-不确定吗?)
- 我们要复制到不存在的目录吗?
- 该文件已经存在,可能已被锁定? (即我们尚未关闭另一个应用程序实例)?
抱歉,我无法提供更多帮助,我很少遇到File.Copy的问题。
回答
我能够解决问题,Michal向我指出了正确的方向。
问题是我试图使用File.Copy将文件从一个位置复制到另一个位置,而Copy方法仅将所有内容从一个文件复制到另一个位置(如果尚不存在,则创建目标文件)。解决方案是将文件名添加到目标目录。
感谢我们提供的所有帮助!