[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetFileAttributes(string lpFileName);
<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
[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
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!
Please add some!
System.IO.File.GetAttributes