我已经看到有关此主题的一些问题,但没有一个问题完全解决了这个问题。
我想复制一些文件,如果名称已存在则覆盖。函数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);
}
答案 0 :(得分:1)
终于找到了问题:readonly属性。
大多数评论是正确的,最后它与空白无关,尽管我指出它看到了错误,它只是与列表中的一些首要项目巧合。
正如我在评论中所述,由于ssatan关于格式相关问题的建议,发现了问题。我将一些有缺陷的文件复制到其他文件夹,尽管删除了所有的空格,但仍然失败了copys。之后,我制作了一个与原版同名的空mp3文件,它就像一个魅力。
现在看来很明显,复制的文件带有readonly属性。如果我手动复制它会被忽略,但File.Copy()函数会检查它并抛出UnauthorizedAccessException(应该这样)。