You are assigning all the file names into one variable. As you go over the files in the for-loop this is always overwritten by the current file name and naturally after you exit the loop there is the last one. What you need is a list.
var listOfFiles = new List<string>(hfc1.Count);
for (int i = 0; i < hfc1.Count; i++)
{
string filesname = System.IO.Path.GetFileName(hpf1.FileName);
listOfFiles.Add(filesname);
}