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 (без расширения).

Другие вопросы по тегам