C#Windows应用程序文件:无权访问File.Copy

时间:2018-08-12 13:05:04

标签: c# system.io.file

我在ANN中有一个项目。首先,我想将图片克隆到可以每次访问的本地目录中,以便进行索引。目录是

  

@“ D:\ assets \”

对于图像,我正在使用openfiledialog,并且启用了multiselect。

对于容器,我正在使用此LOC:

a:
4
1
2
3
a2:
4
1
2
3
a3:
6
1
2
3
2
terminate called after throwing an instance of 'boost::archive::archive_exception'
  what():  unregistered class - derived class not registered or exported
Signal: SIGABRT (Aborted)

整个代码是分开的。第一个用于浏览,第二个用于将图像复制到我第一次提到的目录中。

对于浏览按钮:

> List<string[,]> path = new List<string[,]>();

用于保存图片

    List<string[,]> path = new List<string[,]>();
    private void btnBrowse_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "File Extention|*.jpg;*.jpeg;*.bmp";
        ofd.Multiselect = true;
        if(ofd.ShowDialog() == DialogResult.OK)
        {
            foreach (var filename in ofd.FileNames)
            {
                imageList.Images.Add(filename, new Bitmap(filename));
                var saveFileName = Path.GetFileName(filename);
                var saveFileDir = Path.GetDirectoryName(filename);
                lvFruit.Items.Add(saveFileName, filename);
                string[,] input = new string[,] { {saveFileDir, saveFileName } };
                path.Add(input);
            }
        }
    }

图像文件位于D:\ pic,应复制到D:\ assets

错误是:

  

System.UnauthorizedAccessException:拒绝访问路径'D:\ pic      在System.IO .__ Error.WinIOError(Int32 errorCode,可能是StringFullPath)      在System.IO.File.InternalCopy(String sourceFileName,String destFileName,布尔覆盖,布尔checkHost)      在System.IO.File.Copy(字符串sourceFileName,字符串destFileName,布尔覆盖)      在D:\ Fruit字典\ Fruit字典\ trainForm.cs:第95行的Fruit_Dictionary.trainForm.btnSubmit_Click(对象发送方EventArgs e)处

您知道没有任何许可的原因是什么?

实际上,我已经以管理员身份运行该程序,并且我已经检查了D:\ pic中的许可权并将其更改为具有所有许可权。

基于这个原因,我已经在互联网上寻找和浏览了2天,但是我什么都没存档。任何帮助都会对我完成这个项目有所帮助。

谢谢:)

1 个答案:

答案 0 :(得分:-1)

尝试使用一个过程来复制文件

             foreach(String ImageOldPath in Paths)
             {
               try{
                ProcessStartInfo info = new ProcessStartInfo();
                info.FileName = "C:\\Windows\\system32\\xcopy.exe";
                info.Arguments = $"{ImageOldPath LocalPath} "
                Console.WriteLine(info.Arguments);
                info.UseShellExecute = false;
                info.CreateNoWindow = true;
                info.WindowStyle = ProcessWindowStyle.Hidden;
                Process proc = new Process();
                proc.StartInfo = info;
                proc.Start();
                proc.Dispose();
                }catch(Exception e){}
             }

更新

    在您的情况下,
  • ImageOldPath是图像的旧路径,它位于您的foreach statement

  • 中的 filename
  • 本地路径为 appPath