GetFileAttributes (kernel32)
Last changed: mklement0-173.48.238.201

.
Summary

C# Signature:

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetFileAttributes(string lpFileName);

VB.Net Signature:

<DllImport("kernel32.dll")>_
Public Shared Function GetFileAttributes(ByVal lpFileName As String) As Integer
End Function

'Constants
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4

Sample Code:

C#

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern uint GetFileAttributes(string lpFileName);
    const uint FILE_ATTRIBUTE_ARCHIVE = 0x20;

....

    if ((GetFileAttributes(@"\\?\UNC\" + file) & FILE_ATTRIBUTE_ARCHIVE) != FILE_ATTRIBUTE_ARCHIVE)
    {
    bool deleted =DeleteFileW(@"\\?\UNC\"+file);
    if (!deleted)
    {
        int lastError = Marshal.GetLastWin32Error();
        Console.WriteLine("Failed to delete '{1}': error={0}", lastError, file);    }
    }

Const FILE_ATTRIBUTE_TEMPORARY = &H100

User-Defined Types:

None.

Notes:

For long file names (260+ characters) prepend "\\?\" to the file name for local files and "\\?\UNC\" for network files.

e.g. D:\A\B\...\C --> \\?\D:\A\B\...\C and \\oscar\meyer\A\B\...\C --> \\?\UNC\oscar\meyer\A\B\...\C

Updated the C# return type from int to uint. MSDN says it's a DWORD and DWORD is an unsigned integer.

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

System.IO.File.GetAttributes

Documentation