用户在数组中删除指定的字符串?

时间:2018-12-23 00:00:04

标签: c# arrays delete-file

我要在这里执行的操作是从用户那里获取字符串输入,如果该字符串输入在数组中,我想从文件中删除它(数组中的所有项目都是我计算机中经过扫描的实际文件在程序开始并成为一个数组时)是否有一种无需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 :(得分:1)

您仅在阵列中存储文件名,而不是其完整路径或扩展名。您需要更改它,并允许它存储带有扩展名的FileName。

Cache = db.UserTokenCacheList.SqlQuery("SELECT * FROM UserTokenCacheList WHERE webUniqueUserId = @webUniqueUserId;", new System.Data.SqlClient.SqlParameter("@webUniqueUserId", System.Data.SqlDbType.VarChar({Value=signedInUserID}).FirstOrDefault();

然后,您需要按以下方式更改If条件。

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

在这种情况下,用户需要输入带扩展名的文件名。

如果您希望用户仅输入文件名(不带扩展名,如代码中所示),则可能会遇到两个扩展名不同的文件的情况。

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

更新

根据您的评论,您无法存储扩展,请在下面找到更新的代码。在这种情况下,您不需要更改阵列。由于只存储lnk文件,因此可以在文件名后附加扩展名,以在Path.Combine期间完成路径。

"test.jpg"
"test.bmp"