То, что вы делаете, кажется, не имеет большого смысла. Что должна делать следующая строка?
this.sourceFileOpenFileDialog.FileNames[i] = FileName;
Просто измените foreach
на это:
foreach (string FileName in this.sourceFileOpenFileDialog.FileNames)
{
listBoxSourceFiles.Items.Add(FileName);
Log("Source Files: " + FileName);
System.IO.File.Copy(FileName, Path.Combine(tempFolder, Path.GetFileName(FileName)));
}
Ошибка возникает из-за того, что у вас есть две переменные с именем sourceFileOpenFileDialog
. Одна является членом вашего класса, а другая объявлена внутри метода.
Тот, который объявлен внутри метода, всегда используется только в следующей строке:
Log("Source Files: " + sourceFileOpenFileDialog.FileNames[i]);
Поскольку этот экземпляр не используется для показа диалогового окна пользователю, его свойство FileNames
имеет Length
, равное 0, и поэтому попытка доступа к любым элементам в нем приводит к исключению.
Обновление:
Есть еще одна проблема:
FileName - полный путь, поэтому добавление его к временному пути приведет к неверному пути. Также рассмотрите возможность использования Path.Combine
для объединения двух путей:
Path.Combine(tempFolder, Path.GetFileName(FileName))