[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetFileAttributes(string lpFileName);
// Frequently used constants (incomplete - see https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx for full list)
const unit FILE_ATTRIBUTE_ARCHIVE = 0x20;
const unit FILE_ATTRIBUTE_DIRECTORY = 0x10;
const unit FILE_ATTRIBUTE_HIDDEN = 0x2;
const unit FILE_ATTRIBUTE_NORMAL = 0x80;
const unit FILE_ATTRIBUTE_READONLY = 0x1;
const unit FILE_ATTRIBUTE_SYSTEM = 0x4;
const unit FILE_ATTRIBUTE_TEMPORARY = 0x100;
const uint INVALID_FILE_ATTRIBUTES = 0xffffffff;
<DllImport("kernel32.dll")>_
Public Shared Function GetFileAttributes(ByVal lpFileName As String) As Integer
End Function
' Frequently used constants (incomplete - see https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx for full list)
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
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const INVALID_FILE_ATTRIBUTES = &Hffffffff
None.
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.
Please add some!
[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);
}
}
System.IO.File.GetAttributes