代码之家  ›  专栏  ›  技术社区  ›  Mark

如何标记文件夹进行删除C#

  •  6
  • Mark  · 技术社区  · 17 年前

    4 回复  |  直到 17 年前
        1
  •  19
  •   Hath    7 年前

    http://abhi.dcmembers.com/blog/2009/03/24/mark-file-for-deletion-on-reboot/

    https://learn.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-movefileexa#parameters

    ///
    /// Consts defined in WINBASE.H
    ///
    [Flags]
    internal enum MoveFileFlags
    {
        MOVEFILE_REPLACE_EXISTING = 1,
        MOVEFILE_COPY_ALLOWED = 2,
        MOVEFILE_DELAY_UNTIL_REBOOT = 4, //This value can be used only if the process is in the context of a user who belongs to the administrators group or the LocalSystem account
        MOVEFILE_WRITE_THROUGH  = 8
    }
    
    
    /// <summary>
    /// Marks the file for deletion during next system reboot
    /// </summary>
    /// <param name="lpExistingFileName">The current name of the file or directory on the local computer.</param>
    /// <param name="lpNewFileName">The new name of the file or directory on the local computer.</param>
    /// <param name="dwFlags">MoveFileFlags</param>
    /// <returns>bool</returns>
    /// <remarks>http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx</remarks>
    [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll",EntryPoint="MoveFileEx")]
    internal static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName,
    MoveFileFlags dwFlags);
    
    //Usage for marking the file to delete on reboot
    MoveFileEx(fileToDelete, null, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
    
        2
  •  3
  •   John Weldon user3678248    17 年前

    This link

    [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
    public static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, int dwFlags);
    
    public const int MOVEFILE_DELAY_UNTIL_REBOOT = 0x4;
    
    MoveFileEx(filename, null, MOVEFILE_DELAY_UNTIL_REBOOT);
    
        3
  •  1
  •   Miki Watts    17 年前

    http://abhi.dcmembers.com/blog/2009/03/24/mark-file-for-deletion-on-reboot/ :

    ///
    /// Consts defined in WINBASE.H
    ///
    internal enum MoveFileFlags
    {
        MOVEFILE_REPLACE_EXISTING = 1,
        MOVEFILE_COPY_ALLOWED = 2,
        MOVEFILE_DELAY_UNTIL_REBOOT = 4,
        MOVEFILE_WRITE_THROUGH  = 8
    }
    
    
    /// <summary>
    /// Marks the file for deletion during next system reboot
    /// </summary>
    /// <param name="lpExistingFileName">The current name of the file or directory on the     local computer.</param>
    /// <param name="lpNewFileName">The new name of the file or directory on the local   computer.</param>
    /// <param name="dwFlags">MoveFileFlags</param>
    /// <returns>bool</returns>
    /// <remarks>http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx</remarks>
    [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll",EntryPoint="MoveFileEx")]
    internal static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName,
    MoveFileFlags dwFlags);
    
    //Usage for marking the file to delete on reboot
    MoveFileEx(fileToDelete, null, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
    

    编辑:击败

        4
  •  0
  •   Ainullin Damir    9 年前

    Reference to documentation.

    public class Cleanuper
    {
        private void PendingDeleteDirectory(string directoryPath)
        {
            foreach (string directory in Directory.GetDirectories(directoryPath, "*", SearchOption.TopDirectoryOnly))
            {
                PendingDeleteDirectory(directory);
            }
    
            foreach (string file in Directory.GetFiles(directoryPath, "*", SearchOption.TopDirectoryOnly))
            {
                NativeMethods.MoveFileEx(file, null, MoveFileFlags.DelayUntilReboot);
            }
            NativeMethods.MoveFileEx(directoryPath, null, MoveFileFlags.DelayUntilReboot);
        }
    }
    
    public static class NativeMethods
    {
        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        internal static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);
    }
    
    [Flags]
    public enum MoveFileFlags
    {
        DelayUntilReboot = 0x00000004
    }