按用户删除数组中的指定字符串?
Deleting an specified string by user in an array?
我想在这里做的是从用户那里获取一个字符串输入,如果该字符串输入在数组中,我想从文件中删除它(数组中的所有项目都是我计算机中的实际文件在程序开始时被扫描并成为一个数组)有没有没有 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");
}
预期结果是删除文件夹中键入的程序,实际结果只是一个错误代码。
您在数组中存储的只是文件名,而不是其完整路径或扩展名。您需要更改它,并允许它存储带扩展名的文件名。
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");
}
我想在这里做的是从用户那里获取一个字符串输入,如果该字符串输入在数组中,我想从文件中删除它(数组中的所有项目都是我计算机中的实际文件在程序开始时被扫描并成为一个数组)有没有没有 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");
}
预期结果是删除文件夹中键入的程序,实际结果只是一个错误代码。
您在数组中存储的只是文件名,而不是其完整路径或扩展名。您需要更改它,并允许它存储带扩展名的文件名。
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");
}