Вам нужно будет опубликовать свой код, но для выстрела в темноте ...
В вашем методе btnFinish_Click на вашей странице что-то не так с тем, где вы пытаетесь использовать регулярное выражение.
Скорее всего, вы захватили группы совпадений RegEx и попытались перечислить их, хотя их на самом деле нет. (Или у вас есть цикл For, проходящий больше элементов, чем на самом деле имеет коллекция / список.)
Редактировать: Я на 99% уверен, что сразу после этого:
Match m = r.Match(filepath);
Прежде чем делать что-либо еще, после этой строки проверьте, есть ли какие-либо группы.
if (m.Groups.Count == 0) { DoSomethingElseHere(); }
Затем посмотрите, есть ли в этой группе какие-либо захваты:
if (m.Groups[0].Captures.Count == 0) { DoSomethingElseHere(); }
В конечном итоге вы узнаете, что не так с вводом, выполнив это, но, глядя на код и не активно отлаживая его, это единственный хороший способ выяснить.
Редактировать 2: Кстати, принципиальная причина, по которой у вас возникает эта проблема, заключается в том, что вы действительно не проверили ввод, прежде чем пытаться его использовать. Код, который я только что дал в качестве примера, поможет вам начать, но вы всегда должны очищать то, что вам приходит.
Кроме того, если вы используете элемент управления загрузкой, не все браузеры передают полный UNC-путь к файлу (то есть \ server \ share \ file.ext) - некоторые просто передают имя файла само по себе, Вот некоторые вещи, которые нужно проверить.