关于 C# 中的文件权限
Posted
技术标签:
【中文标题】关于 C# 中的文件权限【英文标题】:About File permissions in C# 【发布时间】:2010-09-06 15:49:04 【问题描述】:在 C# 中创建文件同步程序时,我尝试在 LocalFileItem
类中创建一个方法 copy
,该方法使用 System.IO.File.Copy(destination.Path, Path, true)
方法,其中 Path
是 string
。
使用目的地执行此代码后。 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");
【问题讨论】:
【参考方案1】:你好像放错了File.Copy()中的参数,应该是File.Copy(string source, string destination)。
“C:\Test2”也是一个目录吗?您不能将文件复制到目录。 改用类似的东西:
文件.复制( 源文件, Path.Combine(destinationDir,Path.GetFileName(sourceFile)) );【讨论】:
【参考方案2】:我在这里有点猜测,但可能是因为:
您正试图在 C:root 中执行文件操作? (如果您正在使用它,Vista 可能会对此提供保护 - 不确定?) 您正在尝试复制到一个不存在的目录? 文件已经存在并且可能被锁定? (即您没有关闭另一个应用程序实例)?抱歉,我无法提供更多帮助,我很少遇到 File.Copy 问题。
【讨论】:
【参考方案3】:我能够解决问题,Michal 为我指明了正确的方向。 问题是我尝试使用 File.Copy 将文件从一个位置复制到另一个位置,而 Copy 方法仅将一个文件的所有内容复制到另一个文件(如果目标文件不存在,则创建它)。解决方案是将文件名附加到目标目录。 感谢大家的帮助!
【讨论】:
以上是关于关于 C# 中的文件权限的主要内容,如果未能解决你的问题,请参考以下文章