Это заинтриговало меня достаточно, чтобы попробовать, хотя и без тщательного или тщательного тестирования, вот пара вещей, с которыми вы можете поработать (ищите исключения!):
static bool CanCreateFile(FileInfo fileInfo)
{
if (fileInfo.Exists) return false;
return !fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
}
static bool CanCreateFile2(FileInfo fileInfo)
{
if (fileInfo.Exists) return false;
return IsDirectoryWriteable(
Path.GetDirectoryName(fileInfo.FullName));
}
static bool IsDirectoryWriteable(string path)
{
var directoryInfo = new DirectoryInfo(path);
if (!directoryInfo.Exists)
{
return IsDirectoryWriteable(directoryInfo.Parent.FullName);
}
return !directoryInfo.Attributes.HasFlag(FileAttributes.ReadOnly);
}
Но, как указано в другом ответе, на самом деле нет никакой гарантии, что когда вы действительно вернетесь из «проверки», что-то не произойдет, чтобы изменить достоверность ситуации до вашего следующего действия по написанию.