Not sure if this is your issue but it probably is; it looks like you are trying to add one more item to the ListBox than there is in your item list.
Let's say songsum = 20 and you loop from 0 to 20, that's actually 21 items. If you only have 20 items then you will get an IndexOutOfRange error.
Try this in your loops, notice we are checking for one less than the songsnum value...
for (int i = 0; i < songsnum - 1; i++)
{
songListBef.Items.Add(Path.GetFileName(full_fname_ex[i]));
fname_noex_b[i] = new StringBuilder(Path.GetFileNameWithoutExtension(full_fname_ex[i]));
fname_noex_b[i].Remove(0, toRemove_bef);
fname_noex_b[i].Remove(fname_noex_b[i].Length - toRemove_aft, toRemove_aft);
}
...
for (int i = 0; i < songsnum - 1; i++)
{
fname_noex_b[i].Append(Path.GetExtension(full_fname_ex[i]));
songListAft.Items.Add(fname_noex_b[i].ToString());
}