because you rewrite your new file in your loop. You should create your new string in the loop (use a stringBuilder for this will be more efficient), but write the new file out of the loop :
string line;
var sb = new StringBuilder();
System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt");
while ((line = file.ReadLine()) != null)
sb.AppendLine(line.Substring(0, Math.Min(38, line.Length)));
file.Close();
using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:\test2.txt"))
{
files.WriteLine(sb.ToString());
}
or to do it shorter
var result = File.ReadAllLines(@"c:\test.txt")
.Select(m => m.Substring(0, Math.Min(38, m.Length)));
File.WriteAllLines(@"C:\test2.txt", result);