Разбивайте сложное на простые части. A || B & (C || D) придумаем более практический пример (эквивалентный вашему).
if (!file.exist || (file.type != DIRECTORY) & (file.creationDate < lastGoodDate || file.size > maxSize))
{
printErrorMessage();
}
Такое сложно написать и прочитать. Более длинный, зато более понятный вариант:
bool isBadFile(file)
{
if (!file.exist)
return true;
if (file.type == DIRECTORY)
return fasle; //skip directories
bool isTooOld = file.creationDate < lastGoodDate;
bool isTooBig = file.size > maxSize;
return isTooBig || isTooOld
}
if (isBadFile(file))
{
printErrorMessage();
}