UPDATE
À l'époque de ma naïveté, je suggérais de le faire manuellement (c'était une solution simple à une question simple), mais comme cela devient de plus en plus populaire, je recommande d'utiliser la bibliothèque CsvHelper qui effectue tous les contrôles de sécurité, etc.
Le CSV est beaucoup plus compliqué que ce que la question/réponse suggère.
Réponse originale
Comme vous avez déjà une boucle, envisagez de la faire comme ceci :
//before your loop
var csv = new StringBuilder();
//in your loop
var first = reader[0].ToString();
var second = image.ToString();
//Suggestion made by KyleMit
var newLine = string.Format("{0},{1}", first, second);
csv.AppendLine(newLine);
//after your loop
File.WriteAllText(filePath, csv.ToString());
Ou quelque chose de ce genre. Mon raisonnement est le suivant : vous n'aurez pas besoin d'écrire dans le fichier pour chaque élément, vous n'ouvrirez le flux qu'une fois et n'y écrirez qu'ensuite.
Vous pouvez remplacer
File.WriteAllText(filePath, csv.ToString());
avec
File.AppendAllText(filePath, csv.ToString());
si vous voulez garder les versions précédentes de csv dans le même fichier
C# 6
Si vous utilisez c# 6.0, vous pouvez procéder comme suit
var newLine = $"{first},{second}"
EDITAR
Voici un lien à une question qui explique ce que Environment.NewLine
fait.