【问题标题】:About File permissions in C#关于 C# 中的文件权限
【发布时间】:2010-09-06 15:49:04
【问题描述】:

在 C# 中创建文件同步程序时,我尝试在 LocalFileItem 类中创建一个方法 copy,该方法使用 System.IO.File.Copy(destination.Path, Path, true) 方法,其中 Pathstring
使用目的地执行此代码后。 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");
        }
    }
}

【问题讨论】:

    标签: c# file copy


    【解决方案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 方法仅将一个文件的所有内容复制到另一个文件(如果目标文件不存在,则创建它)。解决方案是将文件名附加到目标目录。 感谢大家的帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-25
          • 1970-01-01
          • 2016-04-14
          • 2013-07-13
          • 2011-11-09
          • 2018-09-19
          相关资源
          最近更新 更多