路径和名称中有空格时FileCopy出错

时间:2015-06-11 01:42:29

标签: c#

我已经看到有关此主题的一些问题,但没有一个问题完全解决了这个问题。

我想复制一些文件,如果名称已存在则覆盖。函数File.Copy(source,destination,true)在目标文件不存在的情况下可以正常工作,并且如果原始文件的路径中没有没有空间。< / p>

但是当有空格时,我得到一个&#34;访问被拒绝&#34;错误。我在两个路径中都拥有权限,其余文件都被正确覆盖。

与&#34; @&#34;文字没有运气,也引用两条路径(在这种情况下得到了ArgumentException)。

这是我的代码:

 private void button1_Click(object sender, EventArgs e)
    {
        int totalPaths = pathList.Count;
        int totalCorrectPaths = 0;
        string currentFile = "";
        string failedFiles = "";
        string destination = "";
        bool errors=false;
        for (int i = 0; i < totalPaths; i++)
        {
            progressBar1.Value = Convert.ToInt16((100.0 * i) / totalPaths);
            listBox1.SelectedIndex = i;
            //currentFile = (String) listBox1.SelectedValue;
            currentFile = pathList.ElementAt(i);
            try
            {
                destination=Path.Combine(textBox2.Text,Path.GetFileName(currentFile));
                File.Copy(currentFile,destination, true);
                totalCorrectPaths++;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\nCopiando el archivo:\n" + currentFile, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                errors = true;
                failedFiles+="\n"+ex.Message+" "+currentFile;
            }
        }
        if (errors)
        {
            MessageBox.Show(totalCorrectPaths +" canciones se han copiado correctamente"+"\nErrores al copiar los siguientes archivos:\n" + failedFiles, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else {
            MessageBox.Show(totalCorrectPaths +" canciones se han copiado correctamente", "Finalizado", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }

任何提示都将非常感激。

更新3:绝对不是源文件夹上的权限问题,因为其他文件已成功复制。以管理员身份运行并没有改善它。

也许你是对的,我指的是错误的方向,但我无法弄清楚错误。这是一个图像,其中包含一些抛出错误的名称(我目前的测试是820个文件中的20个)。抱歉,西班牙语截图,每行由&#34;目的地&#34; &#34; UnauthorizedAccessException.Message&#34; &#34;源&#34;

屏幕截图链接:http://i.imgur.com/texV67H.png

更新4:正如你们中的一些人指出的那样,我错了,正如@sstan所建议的例子那样,仍然无法确定失败文件的共同点

static void Main(string[] args)
    {
        string source = Path.GetFullPath(@"C:\test this\hello 1.txt");
        string destination = Path.GetFullPath(@"C:\test this\hello 2.txt");
        File.Copy(source, destination, true);
    }

更新5:上面的代码有效,下面的代码重现失败(由于文件已存在,第一次执行有效,第二次及以后失败)

static void Main(string[] args)
    {
        string source = Path.GetFullPath(@"C:\test this\01 Test.mp3");
        string destination = Path.GetFullPath(@"C:\test this\01 Test copy.mp3");
        File.Copy(source, destination, true);
    }

1 个答案:

答案 0 :(得分:1)

终于找到了问题:readonly属性。

大多数评论是正确的,最后它与空白无关,尽管我指出它看到了错误,它只是与列表中的一些首要项目巧合。

正如我在评论中所述,由于ssatan关于格式相关问题的建议,发现了问题。我将一些有缺陷的文件复制到其他文件夹,尽管删除了所有的空格,但仍然失败了copys。之后,我制作了一个与原版同名的空mp3文件,它就像一个魅力。

现在看来很明显,复制的文件带有readonly属性。如果我手动复制它会被忽略,但File.Copy()函数会检查它并抛出UnauthorizedAccessException(应该这样)。