У меня есть простая консольная программа C #, которая вызывает функцию, показанную ниже:
static void DirTest()
{
string dir = "Temp";
for (int i = 0; i < int.MaxValue; i++)
{
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
string file = Path.Combine(dir, "sample.txt");
File.Create(file).Close();
File.Delete(file);
Directory.Delete(dir);
}
}
На некоторых машинах Win 7 эта функция в конечном итоге выдает исключение (когда i больше 100000):
Unhandled Exception: System.UnauthorizedAccessException: Access to the path 'D:\... \Temp\sample.txt' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBU TES secAttrs, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare sh are, Int32 bufferSize, FileOptions options) at System.IO.File.Create(String path) at Exceptions.Program.DirTest() in D:\Exceptions\Program.cs:line 118 at Exceptions.Program.Main(String[] args) in D:\Exceptions\Program.cs: line 167
На этих машинах установлены агент McAfee и агент безопасности Cisco, а также множество других ПО. Защитник Windows отключен. Программа работает в консоли администратора. Программа скомпилирована для .net 3.5. Этого я не видел на машинах W2k3 или XP.
Если я использую procmon для отслеживания всех событий и процессов, которые обращаются к папке, в которой создается и удаляется «Temp \ sample.txt», я вижу, что кроме тестового приложения никакие другие процессы не обращаются к пути. Даже после исключения в procmon нет других процессов. Так что я не могу доказать, что это вина антивируса.
Есть ли у кого-нибудь идеи, что может быть не так? Я поймал ошибку в .net на Win7;)
Спасибо!