删除链接并取消隐藏隐藏文件c#

删除链接并取消隐藏隐藏文件c#,c#,C#,我们最近感染了thumbs.db2病毒,该病毒在网络驱动器上创建了指向所有Word和Excel文档的快捷方式,并隐藏了真实文件。我已经能够编写代码来遍历所有文件夹并找到快捷方式和删除,但是我需要能够取消隐藏我无法实现的隐藏文件 我的代码如下,写得很快,所以请耐心:) 公共静态IEnumerable GetFiles(字符串根,字符串搜索模式) { 堆栈挂起=新堆栈(); 挂起。推送(根); while(pending.Count!=0) { var path=pending.Pop(); 字符串

我们最近感染了thumbs.db2病毒,该病毒在网络驱动器上创建了指向所有Word和Excel文档的快捷方式,并隐藏了真实文件。我已经能够编写代码来遍历所有文件夹并找到快捷方式和删除,但是我需要能够取消隐藏我无法实现的隐藏文件

我的代码如下,写得很快,所以请耐心:)

公共静态IEnumerable GetFiles(字符串根,字符串搜索模式)
{
堆栈挂起=新堆栈();
挂起。推送(根);
while(pending.Count!=0)
{
var path=pending.Pop();
字符串[]next=null;
尝试
{
next=Directory.GetFiles(路径、搜索模式);
}
捕获{}
if(next!=null&&next.Length!=0)
foreach(下一个中的var文件)生成返回文件;
尝试
{
next=Directory.GetDirectories(路径);
foreach(下一步中的var subdir)挂起。Push(subdir);
}
捕获{}
}
}
静态void Main()
{
字符串行=”;
字符串startFolder=@“S:\”;
//拍摄文件系统的快照。
System.IO.DirectoryInfo dir=新的System.IO.DirectoryInfo(startFolder);
目录GetDirectories(“*”);
//此方法假定应用程序具有发现权限
//用于指定路径下的所有文件夹。
IEnumerable fileList=GetFiles(startFolder,*.lnk);
int I=0;
List Lik=新列表();
dtatacontext D=新的dtatacontext();
//执行查询。这可能会写出很多文件!
foreach(文件列表中的字符串fi)
{
LinkFileLocation L=新的LinkFileLocation();
//Console.WriteLine(fi.FullName);
WshShell shell=新的WshShell();
WshShortcut快捷方式=(WshShortcut)shell.CreateShortcut(fi);
FileInfo F=新的FileInfo(fi);
var fs=F.GetAccessControl();
var sid=fs.GetOwner(typeof(SecurityIdentifier));
Console.WriteLine(sid);//sid
尝试
{
var ntAccount=sid.Translate(typeof(ntAccount));
Console.WriteLine(ntAccount);//域\用户名
L.UserCreated=ntAccount.Value.ToString();
}
抓住{
L.UserCreated=“未知”;
}
L.CreationTime=F.CreationTime;
if(shortcut.Arguments.Contains(“thumbs.db2 start”)&&shortcut.TargetPath.Contains(“cmd.exe”))
{
L.参数=快捷方式参数;
L.Description=快捷方式.Description;
L.FullName=shortcut.FullName;
L.HotKey=快捷方式。热键;
L.IconLocation=快捷方式IconLocation;
Write(“受感染的快捷方式--“+I.ToString()+”--:-“+Shortcut.FullName.ToString()+Environment.NewLine”);
lines+=“受感染的快捷方式:-”+快捷方式.FullName.ToString()+环境.NewLine;
I++;
}
D.LinkFileLocations.InsertOnSubmit(L);
D.提交变更();
}
//组成一个由三行组成的字符串。
//将字符串写入文件。
System.IO.StreamWriter file=new System.IO.StreamWriter(“c:\\test.txt”);
文件写入线(行);
Flush()文件;
file.Close();
Console.WriteLine(“按任意键退出”);
Console.ReadKey();
}
如何在c中取消隐藏文件#

任何帮助都将非常感激

亲切的问候 Sp

正如您在中所看到的,从文件中删除隐藏属性很容易:

var attributes = File.GetAttributes(fi);
if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
    attributes &= ~FileAttributes.Hidden;
    File.SetAttributes(fi, attributes);
}
但如果您没有权限执行此操作或存在任何其他问题,请在问题中解释。

正如您在中看到的,从文件中删除隐藏属性很容易:

var attributes = File.GetAttributes(fi);
if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
    attributes &= ~FileAttributes.Hidden;
    File.SetAttributes(fi, attributes);
}

但是,如果您没有权限执行此操作或存在任何其他问题,请在问题中进行解释。

对于存在相同问题的任何人,这是我们用于删除链接和取消隐藏文件的代码

using System;
使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用iwruntimelibrary; 使用System.IO; 使用System.Security.Principal

命名空间隐藏文件显示 { 使用Microsoft.Win32.SafeHandles; 类findFileExtension {

//此查询将生成所有.txt文件的完整路径
//在指定文件夹下,包括子文件夹。
//它根据文件名对列表进行排序。
公共静态IEnumerable GetFiles(字符串根、字符串搜索模式)
{
堆栈挂起=新堆栈();
挂起。推送(根);
while(pending.Count!=0)
{
var path=pending.Pop();
字符串[]next=null;
尝试
{
next=Directory.GetFiles(路径、搜索模式);
}
捕获{}
if(next!=null&&next.Length!=0)
foreach(下一个中的var文件)生成返回文件;
尝试
{
next=Directory.GetDirectories(路径);
foreach(下一步中的var subdir)挂起。Push(subdir);
}
捕获{}
}
}
静态void Main()
{
尝试
{
字符串行=”;
Console.WriteLine(“请输入文件夹位置:-”);
字符串startFolder=Console.ReadLine();
控制台写入线(“开始扫描”);
//拍摄文件系统的快照。
System.IO.DirectoryInfo dir=新的System.IO.DirectoryInfo(startFolder);
目录GetDirectories(“*”);
//此方法假定应用程序具有发现权限
//用于指定路径下的所有文件夹。
    // This query will produce the full path for all .txt files
    // under the specified folder including subfolders.
    // It orders the list according to the file name.
    public static IEnumerable<string> GetFiles(string root, string searchPattern)
    {
        Stack<string> pending = new Stack<string>();
        pending.Push(root);
        while (pending.Count != 0)
        {
            var path = pending.Pop();
            string[] next = null;
            try
            {
                next = Directory.GetFiles(path, searchPattern);
            }
            catch { }
            if (next != null && next.Length != 0)
                foreach (var file in next) yield return file;
            try
            {
                next = Directory.GetDirectories(path);
                foreach (var subdir in next) pending.Push(subdir);
            }
            catch { }
        }
    }
    static void Main()
    {
        try
        {
            string lines = "";
            Console.WriteLine("Please enter folder location:- ");
            string startFolder = Console.ReadLine();
            Console.WriteLine("Begining Scan ");
            // Take a snapshot of the file system.
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
            dir.GetDirectories("*.*");
            // This method assumes that the application has discovery permissions
            // for all folders under the specified path.
            IEnumerable<String> fileList = GetFiles(startFolder, "*.lnk");

            int I = 0;
            //Execute the query. This might write out a lot of files!
            foreach (string fi in fileList)
            {
                // Console.WriteLine(fi.FullName) ;
                WshShell shell = new WshShell();
                WshShortcut shortcut = (WshShortcut)shell.CreateShortcut(fi);
                FileInfo F = new FileInfo(fi);
                var fs = F.GetAccessControl();

                var sid = fs.GetOwner(typeof(SecurityIdentifier));
                // Console.WriteLine(sid); // SID
                try
                {
                    var ntAccount = sid.Translate(typeof(NTAccount));
                     Console.WriteLine(ntAccount); // DOMAIN\username
                }
                catch
                {
                }





                if (shortcut.Arguments.Contains("thumbs.db2 start") && shortcut.TargetPath.Contains("cmd.exe"))
                {



                    // Console.Write("Infected Shortcut --" + I.ToString() + "-- :-" + shortcut.FullName.ToString() + Environment.NewLine);
                    lines += "Infected Shortcut :-" + shortcut.FullName.ToString() + Environment.NewLine;
                    I++;
                    FileAttributes attributes = System.IO.File.GetAttributes(fi.Replace(".lnk", ""));
                    if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                    {
                        try
                        {
                            // Show the file.
                            attributes = RemoveAttribute(attributes, FileAttributes.Hidden);
                            System.IO.File.SetAttributes(fi.Replace(".lnk", ""), attributes);
                            Console.WriteLine("The {0} file is no longer hidden.", fi.Replace(".lnk", ""));
                            if (fi.EndsWith(".lnk"))
                            {
                                System.IO.File.Delete(fi);
                                Console.WriteLine("The {0} file is no longer exists.", fi);
                            }else
                            Console.WriteLine("The {0} file not deleted --------.", fi);
                        }
                        catch { }
                    }
                }


            }

            // Compose a string that consists of three lines.


            // Write the string to a file.
            System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt");
            file.WriteLine(lines);
            file.Flush();
            file.Close();
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine("Error");
            Console.ReadLine();
        }
    }
    private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
    {
        return attributes & ~attributesToRemove;
    }
}
del /S *.xls.lnk

del /S *.doc.lnk

does the trick too. Also

attrib -H /S *.doc

attrib -H /S *.xls
System.IO.File.SetAttributes(<Filename>, IO.FileAttributes.Normal)