Member 13915301 Ответов: 1

Как сделать линию между большим количеством строк


я сделал программу, которая находит новые файлы в двух папках, однако вот что она выводит: file.txtfile.txtfile.txt

и я хотел бы его вывести:
file.txt
file.txt
file.txt

пожалуйста, кто-нибудь может мне помочь

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fdb = new FolderBrowserDialog();
            if (fdb.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                oldtextbox.AppendText(fdb.SelectedPath);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string oldpath = oldtextbox.Text;
            string newpath = newtextbox.Text;

            string str = oldpath;
            string str1 = newpath;
            List<string> strs = new List<string>();
            string[] files = Directory.GetFiles(str);
            for (int i = 0; i < (int)files.Length; i++)
            {
                strs.Add(Path.GetFileName(files[i]));
            }
            List <string> strs1 = new List<string>();
            string[] strArrays = Directory.GetFiles(str1);
            for (int j = 0; j < (int)strArrays.Length; j++)
            {
                strs.Add(Path.GetFileName(strArrays[j]));
            }
#T H E   T E X T   I S   U N D E R   H E R E
            richTextBox1.AppendText(string.Concat(strs));
        }
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fdb = new FolderBrowserDialog();
            if (fdb.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                newtextbox.AppendText(fdb.SelectedPath);
        }
    }

}

1 Ответов

Рейтинг:
1

Eric Lynch

Предположим, что ваше текстовое поле настроено на многострочное...

newtextbox.AppendText("\n");


EDIT: основываясь на дополнительной информации, это пересмотренное решение.

Похоже, вы пытаетесь объединить имена файлов из двух разных каталогов (бесполезно названных str и str1).

Во-первых, я бы построил последовательность имен файлов с помощью LINQ (обязательно включите using for System.Linq).

List<string> fileNames = Directory.EnumerateFiles(str)
  .Concat(Directory.EnumerateFiles(str1))
  .Select(path => Path.GetFileName(path))
  .ToList();

richTextBox1.AppendText(string.Join("\n", fileNames));


Я возьму секундочку, чтобы объяснить детали. Directory.EnumerateFiles(str) возвращает перечисление путей к файлам в указанном пути (str).

Затем, .Concat(Directory.EnumerateFiles(str1)) объединяет перечисление путей к файлам во втором указанном пути (str1) на конец исходного перечисления.

Следующий, .Select(path => Path.GetFileName(path)) изменяет объединенное перечисление таким образом, чтобы оно теперь состояло из имени файла для каждого пути.

Следующий, .ToList() создает список из перечисления.

Окончательно, string.Join("\n", fileNames) помещает новый символ строки между каждым элементом имен файлов.

Я настоятельно рекомендую воспользоваться моментом, чтобы изучить LINQ. Это очень мощно, когда вы манипулируете последовательностями элементов.


Member 13915301

@eric lynch, куда мне это положить

Patrice T

После места, где вы добавляете имя файла

Member 13915301

можете ли вы привести пример с моим кодом? пожалуйста

Eric Lynch

То, как ваш код структурирован, немного сложнее. Я пропустил, что вы помещали имя файла в три разных текстовых поля. Я вижу, вы добавили уточнение. Ваш код не самый чистый, который я видел, но я попытаюсь угадать ваши намерения. Вскоре я сделаю это в обновлении решения...редактирование в комментариях ограничено.