文件和目录

文件是一个由字节组成的有序的命名集合,它具有永久存储。在处理文件时,你将处理目录路径、磁盘存储、文件和目录名称。

文件和目录

System.IO 命名空间提供了一组用于执行“实用”文件和目录操作的类型,例如复制和移动、创建目录以及设置文件属性和权限。对于大多数功能,您可以在两个类中选择一个,一个提供静态方法,另一个提供实例方法:

  • 静态类:File 和 Directory

  • 实例方法类:FileInfo 和 DirectoryInfo

另外,还有一个名为Path的静态类。这个类对于文件或是目录并没有什么;相反,他为文件名与目录路径提供了字符串处理的方法。Path同时辅助临时文件处理。

下面是一些常用的文件和目录类:

  • File - 提供用于创建、复制、删除、移动和打开文件的静态方法,并可帮助创建 FileStream 对象。
  • FileInfo - 提供用于创建、复制、删除、移动和打开文件的实例方法,并可帮助创建 FileStream 对象。
  • Directory - 提供用于创建、移动和枚举目录和子目录的静态方法。
  • DirectoryInfo - 提供用于创建、移动和枚举目录和子目录的实例方法。
  • Path - 提供用于以跨平台的方式处理目录字符串的方法和属性。

File类

File是一个静态类,其方法接受文件名。文件名可以相对于当前目录或是具有目录的绝对路径。该类所具有的方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool Exists (string path);      // Returns true if the file is present
void Delete (string path);
void Copy (string sourceFileName, string destFileName);
void Move (string sourceFileName, string destFileName);
void Replace (string sourceFileName, string destinationFileName,
string destinationBackupFileName);
FileAttributes GetAttributes (string path);
void SetAttributes (string path, FileAttributes fileAttributes);
void Decrypt (string path);
void Encrypt (string path);
DateTime GetCreationTime (string path); // UTC versions are
DateTime GetLastAccessTime (string path); // also provided.
DateTime GetLastWriteTime (string path);
void SetCreationTime (string path, DateTime creationTime);
void SetLastAccessTime (string path, DateTime lastAccessTime);
void SetLastWriteTime (string path, DateTime lastWriteTime);
FileSecurity GetAccessControl (string path);
FileSecurity GetAccessControl (string path,
AccessControlSections includeSections);
void SetAccessControl (string path, FileSecurity fileSecurity);

如果目标文件已经存在,则Move会抛出异常;Replace则不会。两个方法都允许文件被重命名以及移动到另一个目录中。

如果文件被标记为只读,则会抛出UnauthorizedAccessException;如果我们通过调用GetAttributes来识别属性。下面是GetAttributes返回的FileAttribute枚举成员:

1
2
3
Archive, Compressed, Device, Directory, Encrypted,
Hidden, Normal, NotContentIndexed, Offline, ReadOnly,
ReparsePoint, SparseFile, System, Temporary

这个枚举中的成员是可组合的。下面显示如何修改文件的一个属性而不影响其他的属性:

1
2
3
4
5
6
7
8
9
string filePath = @"c:\temp\test.txt";
FileAttributes fa = File.GetAttributes (filePath);
if ((fa & FileAttributes.ReadOnly) > 0)
{
fa ^= FileAttributes.ReadOnly;
File.SetAttributes (filePath, fa);
}
// Now we can delete the file, for instance:
File.Delete (filePath);