e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
48 lines
1.9 KiB
C#
48 lines
1.9 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="FileUtil.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Configuration {
|
|
using System;
|
|
using System.IO;
|
|
using Microsoft.Win32;
|
|
using System.Runtime.InteropServices;
|
|
|
|
static internal class FileUtil {
|
|
const int HRESULT_WIN32_FILE_NOT_FOUND = unchecked((int)0x80070002);
|
|
const int HRESULT_WIN32_PATH_NOT_FOUND = unchecked((int)0x80070003);
|
|
|
|
//
|
|
// Use to avoid the perf hit of a Demand when the Demand is not necessary for security.
|
|
//
|
|
// If trueOnError is set, then return true if we cannot confirm that the file does NOT exist.
|
|
//
|
|
internal static bool FileExists(string filename, bool trueOnError) {
|
|
UnsafeNativeMethods.WIN32_FILE_ATTRIBUTE_DATA data;
|
|
bool ok = UnsafeNativeMethods.GetFileAttributesEx(filename, UnsafeNativeMethods.GetFileExInfoStandard, out data);
|
|
if (ok) {
|
|
// The path exists. Return true if it is a file, false if a directory.
|
|
return (data.fileAttributes & (int) FileAttributes.Directory) != (int) FileAttributes.Directory;
|
|
}
|
|
else {
|
|
if (!trueOnError) {
|
|
return false;
|
|
}
|
|
else {
|
|
// Return true if we cannot confirm that the file does NOT exist.
|
|
int hr = Marshal.GetHRForLastWin32Error();
|
|
if (hr == HRESULT_WIN32_FILE_NOT_FOUND || hr == HRESULT_WIN32_PATH_NOT_FOUND) {
|
|
return false;
|
|
}
|
|
else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|