示例#1
0
 private void DeleteFileSystemInfo(FileSystemInfo info)
 {
     info.CreationTime = info.LastWriteTime = info.LastAccessTime = MinTimestamp;
        info.Attributes = FileAttributes.Normal;
        info.Attributes = FileAttributes.NotContentIndexed;
        for (int i = 0, tries = 0; i < FileNameErasePasses; ++tries)
        {
     string newPath = GenerateRandomFileName(info.GetParent(), info.Name.Length);
     try
     {
      info.MoveTo(newPath);
      ++i;
     }
     catch (IOException e)
     {
      switch (System.Runtime.InteropServices.Marshal.GetLastWin32Error())
      {
       case Win32ErrorCode.AccessDenied:
        throw new UnauthorizedAccessException(S._("The file {0} could not " +
     "be erased because the file's permissions prevent access to the file.",
     info.FullName));
       case Win32ErrorCode.SharingViolation:
        if (tries > FileNameEraseTries)
     throw new IOException(S._("The file {0} is currently in use and " +
      "cannot be removed.", info.FullName), e);
        Thread.Sleep(100);
        break;
       default:
        throw;
      }
     }
        }
        for (int i = 0; i < FileNameEraseTries; ++i)
     try
     {
      info.Delete();
      break;
     }
     catch (IOException e)
     {
      switch (System.Runtime.InteropServices.Marshal.GetLastWin32Error())
      {
       case Win32ErrorCode.AccessDenied:
        throw new UnauthorizedAccessException(S._("The file {0} could not " +
     "be erased because the file's permissions prevent access to the file.",
     info.FullName), e);
       case Win32ErrorCode.SharingViolation:
        if (i > FileNameEraseTries)
     throw new IOException(S._("The file {0} is currently in use and " +
      "cannot be removed.", info.FullName), e);
        Thread.Sleep(100);
        break;
       default:
        throw;
      }
     }
 }