C# не удается создать файл в каталоге, если есть другой файл
Может ли кто-нибудь помочь мне, я просто изучаю C# в течение примерно 2 месяцев, у меня есть эта проблема, я создаю класс для фильтрации данных из временного файла и создать результат в новом файле TXT внутри каталога, если каталог пуст или не совпадает дата, он создает отлично, и если есть другой файл в тот же день, он должен создать с увеличением последнего числа на фамилию.
Моя проблема, когда я запускаю код, он не создается, если в каталоге есть файлы с одинаковыми датами, тогда результат должен выглядеть примерно так:
- C: \ result_2014051301.txt
- C: \ result_2014051401.txt
C: \ result_2014051402.txt <- не удалось, это не..2014051401.txt
class Entity2 { public Entity2() { string fileTemp = "DEFAULT.temp"; string indexD = Properties.Settings.Default.ChIndex2D; string indexC = Properties.Settings.Default.ChIndex2C; string indexS = Properties.Settings.Default.ChIndex2S; string tempPath = AppDomain.CurrentDomain.BaseDirectory; string targetPath = Properties.Settings.Default.ExtractALL_DIR; string SourceFile = Path.Combine(tempPath, fileTemp); string tempFileX = Path.GetTempFileName(); if (!System.IO.Directory.Exists(targetPath)) { System.Windows.Forms.MessageBox.Show("Error missing .temp", "Message Box"); } else { string ext = ".txt"; int sequence = 0; DateTime dateFileName = DateTime.Today; string discode = Properties.Settings.Default.ChannelID_2; string filename = discode + "_" + dateFileName.ToString("yyyyMMdd"); string pathX = Properties.Settings.Default.ExtractALL_DIR + @"/Channel2"; if (!Directory.Exists(pathX)) { Directory.CreateDirectory(pathX); } string[] files = Directory.GetFiles(pathX, filename + "*.txt", SearchOption.TopDirectoryOnly); if (files.Length > 0) { Array.Sort(files); string lastFilename = files[files.Length - 1]; sequence = Int32.Parse(lastFilename.Substring(0, lastFilename.Length - 4).Replace(pathX + filename, "")); } sequence++; string newFileName = filename + sequence.ToString().PadLeft(2, '0') + ext; string DestFile = Path.Combine(pathX, newFileName); using (var ab = new StreamReader(SourceFile)) using (var cd = new StreamWriter(DestFile)) { string lineX; while ((lineX = ab.ReadLine()) != null) { if (lineX.LastIndexOf("100", 3) != -1 || lineX.LastIndexOf("MGR", 15) != -1 || lineX.LastIndexOf(indexC, 15) != -1) { lineX = lineX.Replace(indexD, ""); lineX = lineX.Replace("DEFAULT", discode); if (lineX.LastIndexOf("800", 3) != -1) { lineX = lineX.Replace(indexS, ""); } cd.WriteLine(lineX); } } } } } }
1 ответ
Эта часть не работает правильно:
Int32.Parse(lastFilename.Substring(0, lastFilename.Length - 4).Replace(pathX + filename, ""));
pathX + filename
является C:\folderfile.txt
не C:\folder\file.txt
,
Вам либо нужно добавить \
или позвоните по телефону Path.Join
,
Это приведет к Parse
сбой операции, поскольку она пытается использовать строку who (без расширения).