Удаление указанной строки пользователем в массиве? - PullRequest
0 голосов
/ 23 декабря 2018

Что я хочу сделать здесь, так это получить строку ввода от пользователя, и если эта строка ввода находится в массиве, я хочу удалить его из файла (все элементы в массиве - это фактические файлы на моем компьютере, которые были отсканированыв начале программы и стать одним массивом) есть ли способ сделать это без foreach?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;
using System.Threading;

string typed = null;
            string loc = AppDomain.CurrentDomain.BaseDirectory;
            if (!Directory.Exists(loc + @"\shortcuts"))
            {
                Directory.CreateDirectory(loc + @"\shortcuts");
            }
            string[] directory = Directory.GetFiles(loc + @"\shortcuts");

            foreach (var filed in directory)
            {
                File.Move(filed, filed.ToLowerInvariant());
            }

            string[] file = Directory.GetFiles(loc + @"\shortcuts").Select(System.IO.Path.GetFileNameWithoutExtension).ToArray();

            foreach (string dir in directory)
            {
            }
            if (typed == "exit") System.Environment.Exit(0);

            //other ifs here

            else if (typed == "rem")
                        {
                            //Console.WriteLine("\nNot available at the moment\n");

                            ////add this command
                            Console.WriteLine("\nWhich program entry do you wish to erase?\n");
                            typed = Console.ReadLine().ToLower();
                            if (file.Any(typed.Contains))
                            {
                                File.Delete(file.Contains(typed)); //this is the broken part and i don't know how i can get the stings from there

                                Console.WriteLine("hi");
                            }
                            else Console.WriteLine("\n" + typed + " is not in your registered programs list.\n");

                        }

Ожидаемым результатом было избавление от набранной программы в папке, а фактические результаты были просто кодом ошибки.

1 Ответ

0 голосов
/ 23 декабря 2018

В массиве хранится только имя файла, а не его полный путь или расширение.Вам нужно изменить это и позволить ему хранить FileName с расширением.

string[] file = Directory.GetFiles(loc + @"\shortcuts").Select(System.IO.Path.GetFileName).ToArray();

, а затем вам нужно изменить условие If следующим образом.

if (file.Contains(typed))
{
      File.Delete(Path.Combine(loc + @"\shortcuts",typed));
      Console.WriteLine("hi");          
}

В этом сценариипользователю нужно будет ввести имя файла с расширением.

Если вы хотите, чтобы пользователь вводил только имя файла (без расширения, как в вашем коде), то вы можете столкнуться с ситуацией, когда может быть два файла с разным расширением.

"test.jpg"
"test.bmp"

Обновление

На основании вашего комментария, что вы не можете хранить расширения, пожалуйста, найдите обновленный код ниже.В этом случае вам не нужно менять массив.Поскольку вы храните только файлы lnk, вы можете добавить расширение к имени файла, чтобы завершить путь во время Path.Combine.

if (file.Contains(typed))
{
      File.Delete(Path.Combine(loc , @"shortcuts",$"{typed}.lnk"));
      Console.WriteLine("hi");          
}
...