Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для FeddeLeGrand
29 / 29 / 18
Регистрация: 09.03.2016
Сообщений: 198
.NET 3.x

Обойти файлы с защитой и настроить кодировку

20.04.2016, 16:56. Показов 2315. Ответов 24

Студворк — интернет-сервис помощи студентам
Объединяю два вопроса в один, потому что они связаны между собой!

Я делаю программу, которая будет открывать cmd, проверять пинг локальной сети и записывать его в файл .txt .
C#
1
2
3
4
5
6
7
cmdPath cp = new cmdPath(); // public struct cmdPath { public IPHostEntry local_ip; public string host; }
ProcessStartInfo psi;
cp.host = Dns.GetHostName();
cp.local_ip = Dns.GetHostEntry(cp.host);
psi = new ProcessStartInfo("cmd", @"/c ping " + cp.local_ip + " > log cmd_log.txt");
psi.WindowStyle = ProcessWindowStyle.Normal;
Process.Start(psi);
Далее программа должна открыть для пользователя этот файл, в чем возникает сразу 2 проблемы:
1) Поиск затрагивает защищенные директории, которые отказывают в доступе. Происходит вызов UnauthorizedAccessException. Я не хочу бороться с защитой, надо просто обойти её. Как это сделать?
2) После открытия txt файла с логами процесса, я получаю карлючки. Как настроить нужную кодировку для текста из cmd?

Пример кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FileInfo[] fi = new DirectoryInfo(@"C:").GetFiles("cmd_log.txt", SearchOption.AllDirectories);
                    do
                    {
                        Console.WriteLine("Searching.");
                        Thread.Sleep(700);
                        Console.Clear();
                        Console.WriteLine("Searching..");
                        Thread.Sleep(700);
                        Console.Clear();
                        Console.WriteLine("Searching...");
                        Thread.Sleep(700);
                        Console.Clear();
                    } while (fi.Count() < 1);
                    if (fi.Count() >= 1)
                    {
                        Console.Clear();
                        Process.Start("cmd_log.txt", "notepad.exe");
                    }
                    else
                    {
                        Console.Write("File cannot be found.");
                        Thread.Sleep(2500);
                        Console.Clear();
                    }
3) И правильно ли я понимаю, SearchOption.AllDirectories выполняет поиск полностью по всему диску C:\, даже в самом низу? Например, C:\Documents and Settings\Buddy\Рабочий стол\Work\Others\Screenshots
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2016, 16:56
Ответы с готовыми решениями:

Настроить кодировку при выводе на консоль
Скрин: Как решить эту пробемму?

VK.API.messages.send - настроить кодировку
Пишу Standalone приложение. Отправляю запрос через VK API, смыслом которого является отправка сообщения (messages.send). Вот гуид:...

Настроить доступ к папке с парольной защитой
Доброго времени. Делаю по этой статье. Вроде бы всё просто и понятно. На практике не работает. Получается так: А желаемый результат...

24
 Аватар для FeddeLeGrand
29 / 29 / 18
Регистрация: 09.03.2016
Сообщений: 198
21.04.2016, 15:10  [ТС]
Студворк — интернет-сервис помощи студентам
kolorotur, чтоб получился static void внутри struct?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.04.2016, 15:19
FeddeLeGrand, тьфу, елки-палки — это у меня глаза косят.
В общем, первые 7 строчек метода ConsoleInfo.
0
 Аватар для FeddeLeGrand
29 / 29 / 18
Регистрация: 09.03.2016
Сообщений: 198
21.04.2016, 15:39  [ТС]
kolorotur,
Я оформил под себя, но программа теперь работает
Вот полный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        public class Ping
        {
            public static void ConsoleInfo()
            {
                cmdPath cp = new cmdPath();
                cp.host = Dns.GetHostName();
                cp.local_ip = Dns.GetHostEntry(cp.host);
                string tempFile = Path.GetTempFileName();
                using (var tempFileStream = File.Create(tempFile))
                {
                    var info = new ProcessStartInfo("ping", Convert.ToString(cp.local_ip.AddressList[0]))
                    {
                        CreateNoWindow = true,
                        UseShellExecute = false,
                        RedirectStandardOutput = true
                    };
                    var ping = Process.Start(info);
                    ping.StandardOutput.BaseStream.CopyTo(tempFileStream);
                    ping.WaitForExit();
                }
                var notepad = Process.Start("notepad.exe", tempFile);
                notepad.WaitForExit();
 
                File.Delete(tempFile);
            }
        }
Добавлено через 3 минуты
kolorotur,
смогли бы Вы теперь помочь мне с кодировкой?
Текст я получаю такой:
ЋЎ¬Ґ* Ї*ЄҐв*¬Ё б 192.168.0.103 Ї® 32 Ў*©в:
ЋвўҐв ®в 192.168.0.103: зЁб«® Ў*©в=32 ўаҐ¬п<1¬б TTL=128
ЋвўҐв ®в 192.168.0.103: зЁб«® Ў*©в=32 ўаҐ¬п<1¬б TTL=128
ЋвўҐв ®в 192.168.0.103: зЁб«® Ў*©в=32 ўаҐ¬п<1¬б TTL=128
ЋвўҐв ®в 192.168.0.103: зЁб«® Ў*©в=32 ўаҐ¬п<1¬б TTL=128
‘в*вЁбвЁЄ* Ping ¤«п 192.168.0.103:
Џ*ЄҐв®ў: ®вЇа*ў«Ґ*® = 4, Ї®«гзҐ*® = 4, Ї®вҐап*® = 0 (0% Ї®вҐам),
ЏаЁЎ«Ё§ЁвҐ«м*®Ґ ўаҐ¬п ЇаЁҐ¬*-ЇҐаҐ¤*зЁ ў ¬б:
ЊЁ*Ё¬*«м*®Ґ = 0¬бҐЄ, Њ*ЄбЁ¬*«м*®Ґ = 0 ¬бҐЄ, ‘।*ҐҐ = 0 ¬бҐЄ
Добавлено через 10 минут
kolorotur,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В данной реализации никак. Консоль записывает файл в кодировке dos, а блокнот ждет windows-1251 или юникод. Можно перенаправить вывод в поток с помощью ProcessStartInfo.RedirectStandardOutput тогда у тебя будет полный контроль над данными.
Я так понимаю, это вывод на консоль студии, обработка и запись в блокнот в нормальной кодировке?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.04.2016, 16:20
Лучший ответ Сообщение было отмечено FeddeLeGrand как решение

Решение

FeddeLeGrand, попробуйте изменить метод CopyTo на такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static class StreamExtensions
{
    public static void CopyTo(this Stream source, Stream destination, Encoding srcEncoding, Encoding dstEncoding)
    {
        var buffer = new byte[4096];
 
        int read = 0;
        do
        {
            read = source.Read(buffer, 0, buffer.Length);
            var output = Encoding.Convert(srcEncoding, dstEncoding, buffer, 0, read);
            destination.Write(output, 0, output.Length);
        } while (read > 0);
    }
}
И изменить вызов на такой:
C#
1
ping.StandardOutput.BaseStream.CopyTo(tempFileStream, ping.StandardOutput.CurrentEncoding, Encoding.Unicode);
1
 Аватар для FeddeLeGrand
29 / 29 / 18
Регистрация: 09.03.2016
Сообщений: 198
21.04.2016, 16:38  [ТС]
kolorotur,

Не по теме:

О дааа, идеально, спасибо-спасибо-спасибо :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2016, 16:38

Как настроить роутер для сети с 802.1X защитой?
Доброго времени суток! Подскажите, можно ли настроить роутер tp-link TL-WR841ND ver 7.2 для работы с сетью в которой механизм доступа...

Как правильно настроить папку с парольной защитой для конкретного пользователя?
Добрый день.. задача такова, Создаю на сервере папку с общим доступом для того, чтобы конкретный пользователь локальной сети мог хранить...

Не могу настроить кодировку
Здравствуйте, товарищи форумчане) помогите разобраться с кодировками, пожалуйста. немного опишу проблему: есть страница регистрации...

Как настроить кодировку БД
Здравствуйте! Я новичок в PHP и MySQL. Решил вот набрать простейшую программку на PHP, которая выводит содержимое таблицы info (в БД...

Настроить кодировку cp1251 в mariadb 10.1
Добрый день. Стоит задача подружить программу на delphi c базой данных mariadb 10.1.34 на сервере ubuntu 18.04.1. База поднимается с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru