wtuqi
5/5/2020 - 1:23 AM

文件管理

//获取和设置包含该应用程序的目录的名称。(推荐)
string str5 = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
//result: X:\xxx\xxx\ (.exe文件所在的目录 + "\")

//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str6 = System.Windows.Forms.Application.StartupPath;
//result: X:\xxx\xxx(.exe文件所在的目录)

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str7 = System.Windows.Forms.Application.ExecutablePath;
//result: X:\xxx\xxx\xxx.exe(.exe文件所在的目录 +.exe文件名)

//获取应用程序的当前工作目录(不可靠)。
string str8 = System.IO.Directory.GetCurrentDirectory();
//result: X:\xxx\xxx(.exe文件所在的目录)

//获取当前进程的完整路径,包含文件名(进程名)。
string str1 = this.GetType().Assembly.Location;
//result: X:\xxx\xxx\xxx.exe(.exe文件所在的目录 +.exe文件名)

//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。
string str2 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
//result: X:\xxx\xxx\xxx.exe(.exe文件所在的目录 +.exe文件名)

//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str3 = System.Environment.CurrentDirectory;
//result: X:\xxx\xxx(.exe文件所在的目录)

//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str4 = System.AppDomain.CurrentDomain.BaseDirectory;
//result: X:\xxx\xxx\ (.exe文件所在的目录 + "\")

./  代表目前所在的目录
../ 代表上一层目录
/  代表根目录
环境变量获取
System.Environment.GetEnvironmentVariable(“常量名”)
System.Environment.GetEnvironmentVariable("windir")    \\windows系统目录的路径
System.Environment.GetEnvironmentVariable("INCLUDE");  \\C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/include/
System.Environment.GetEnvironmentVariable("TMP");      \\C:/DOCUME~1/zhoufoxcn/LOCALS~1/Temp
System.Environment.GetEnvironmentVariable("TEMP");     \\C:/DOCUME~1/zhoufoxcn/LOCALS~1/Temp
System.Environment.GetEnvironmentVariable("Path");     \\C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/jdk1.5.0/bin;C:/MySQLServer5.0/bin;
//文件删除与移动
File.Delete(inputFile);
File.Move(outputFile, inputFile); 
File.Copy(SourceFile,inputFile);
File.Encrypt //加密
File.Decrypt
// 文件属性获取与设置
string path = "D:\\001.txt";
File.SetAttributes(path, FileAttributes.Normal);// 设置文件属性为正常
File.SetAttributes(path, FileAttributes.ReadOnly);// 设置成只读文件
File.SetCreationTime(path, Convert.ToDateTime("2010/06/06 12:34:56"));//设置文件创建时间
File.SetLastWriteTime(path, Convert.ToDateTime("2010/06/06 12:34:56"));//设置文件最近被修改时间
File.SetLastAccessTime(path, Convert.ToDateTime("2010/06/06 12:34:56"));// 设置文件最近被访问时间
FileAttributes fileAttributes = File.GetAttributes(path);// 获取文件属性
File.SetAttributes(path, fileAttributes | FileAttributes.System);// 设置添加系统文件
File.SetAttributes(path, fileAttributes | FileAttributes.Hidden);// 设置添加隐藏文件
File.SetAttributes(path, fileAttributes | FileAttributes.Archive);// 设置添加归档文件

// 文件夹
string path2 = "D:\\001";
// 设置文件夹属性为正常
File.SetAttributes(path2, FileAttributes.Normal);
// 设置成只读文件夹
File.SetAttributes(path2, FileAttributes.ReadOnly);
// 设置文件夹创建时间
Directory.SetCreationTime(path2, Convert.ToDateTime("2010/06/06 12:34:56"));
// 设置文件夹最近被修改时间
Directory.SetLastWriteTime(path2, Convert.ToDateTime("2010/06/06 12:34:56"));
// 设置文件夹最近被访问时间
Directory.SetLastAccessTime(path2, Convert.ToDateTime("2010/06/06 12:34:56"));

通过属性判断链接文件夹(Documents and Settings)示例:
    string path = @"C:\Documents and Settings\Default User";// 文件夹路径
    FileAttributes fileAttributes = File.GetAttributes(path);
    Console.WriteLine(fileAttributes.ToString());
    Console.ReadKey();
 //通过[Documents and Settings]|[Default User]|[Application Data]输出:Hidden, System, Directory, ReparsePoint, NotContentIndexed 返回值:9238
 //返回值9238的由来参照下面(GetFileAttributes原型说明) FILE_ATTRIBUTE_HIDDEN 2+ _SYSTEM 4+ REPARSE_POINT 1024+ NOT_CONTENT_INDEXED 8192 =9238
 //因此System,ReparsePoint这2个是链接文件夹重要属性
原型:C/C++ 文件属性设置(隐藏、只读、加密等)
在MSDN中,文件总共有15种属性,根据磁盘的分区格式不同,文件的属性也会不同。
GetFileAttributes 获取文件属性函数的返回值
 
返回字段                           返回值           属性类型
FILE_ATTRIBUTE_READONLY              1                只读
FILE_ATTRIBUTE_HIDDEN                2                隐藏
FILE_ATTRIBUTE_SYSTEM                4                系统
FILE_ATTRIBUTE_DIRECTORY             16               目录
FILE_ATTRIBUTE_ARCHIVE               32               存档
FILE_ATTRIBUTE_DEVICE                64               保留
FILE_ATTRIBUTE_NORMAL                128              正常
FILE_ATTRIBUTE_TEMPORARY             256              临时
FILE_ATTRIBUTE_SPARSE_FILE           512              稀疏文件
FILE_ATTRIBUTE_REPARSE_POINT         1024             超链接或快捷方式
FILE_ATTRIBUTE_COMPRESSED            2048             压缩
FILE_ATTRIBUTE_OFFLINE               4096             脱机
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED   8192             索引
FILE_ATTRIBUTE_ENCRYPTED             16384            加密
FILE_ATTRIBUTE_VIRTUAL               65536            虚拟
橙色标记的属性为Windows系统中文件的公有属性,其中“只读”、“隐藏”、“系统”、“存档”为文件的四种基本属性。compressed,content_indexed,encrypted只存在于NTFS分区中。
文件去掉全部属性后(四种基本属性),将自动标记为normal。同时具有system和hidden属性的文件会在系统中彻底隐形,这也是病毒常用的伎俩。
commpressed和encrypted不能共存。默认情况下文件都有content_indexed属性
  2.SetFileAttributes 设置文件属性函数
设置文件属性: SetFileAttributes(文件名, 属性值)
SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY); // 设定为只读
SetFileAttributes(文件名, FILE_ATTRIBUTE_HIDDEN );       //设定为隐藏
SetFileAttributes(文件名, FILE_ATTRIBUTE_SYSTEM);      //设定为系统
SetFileAttributes(文件名, FILE_ATTRIBUTE_ARCHIVE);   //设定为保存
SetFileAttributes(文件名, FILE_ATTRIBUTE_NORMAL);     //设定为一般 (取消前四种属性)
设定二种以上的属性:
设定为只读 + 隐藏
SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN); 
设定为只读 + 隐藏 + 系统 + 保存
SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN _
| FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE);
取消所有设定
SetFileAttributes(文件名, FILE_ATTRIBUTE_NORMAL);

-成功返回1-65536 ,错误返回0;
-#include <windows.h> 头文件;