Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: DrakonHaSh
Дата сообщения: 02.03.2014 16:40
Dauren111
нет
только если пользователь сам вручную выберет файл
Автор: Dauren111
Дата сообщения: 02.03.2014 17:05

Цитата:

только если пользователь сам вручную выберет файл

((((.... как быть тада, существующая система в компании использует имеено эти файлы для аутентификации...хотелось просто встроится во всё это... мож чё посоветуете...
Автор: DrakonHaSh
Дата сообщения: 02.03.2014 17:15
Dauren111
на странице аутентификации сделать <input type="file" ...> и указать пользователю, что туда необходимо выбрать такой-то файл - иначе с доступом к файлам с клиентской стороны никак. после аутентификации хранить факт авторизации в сессии или еще как нибудь. правда с таким подходом юзеры легко могут додуматься копировать эти файлы себе на флешку...
Автор: Dauren111
Дата сообщения: 02.03.2014 20:21

Цитата:
правда с таким подходом юзеры легко могут додуматься копировать эти файлы себе на флешку...

вот именно что этот файл идентифийирует как раз рабочее место... придётся с айпишником походу работать...
Автор: dneprcomp
Дата сообщения: 04.03.2014 18:42
Dauren111

Цитата:
придётся с айпишником походу работать...

Или с именем компьютера или использоать login name с проверкой на одномоментное подключение одинаковых если требуется.
Автор: WingfirE
Дата сообщения: 07.03.2014 20:27
Можете подсказать какое условие нужно указать, чтобы возвращалось нужное значение, а не первое попавшееся.
В конкретном примере нужно значение JPG, а возвращается первое PSD

Код: using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
byte[] content = File.ReadAllBytes(@"D:\error.jpg");
Data Newdata = new Data();
Newdata.Format(content);
Console.ReadLine();
}

}


public class Data
{
public byte[] bytes;
public string name;
List<Data> formats = new List<Data>();

public string Format(byte[] content)
{
formats.Add(new Data() { name = "PNG", bytes = new byte[] { 137, 80, 78, 71, 13, 10, 26, 10 } });
formats.Add(new Data() { name = "ACCDB", bytes = new byte[] { 0, 1, 0, 0, 83, 116, 97, 110, 100, 97, 114, 100, 32, 65, 67, 69, 32, 68, 66 } });
formats.Add(new Data() { name = "MDB", bytes = new byte[] { 0, 1, 0, 0, 83, 116, 97, 110, 100, 97, 114, 100, 32, 74, 101, 116, 32, 68, 66 } });
formats.Add(new Data() { name = "IMG", bytes = new byte[] { 0, 1, 0, 8, 0, 1, 0, 1, 1 } });
formats.Add(new Data() { name = "MDF", bytes = new byte[] { 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 2, 0, 1 } });
formats.Add(new Data() { name = "PIC", bytes = new byte[] { 1, 0, 0, 0, 1 } });
formats.Add(new Data() { name = "MDF", bytes = new byte[] { 1, 15, 0, 0 } });
formats.Add(new Data() { name = "XLS", bytes = new byte[] { 9, 8, 16, 0, 0, 6, 5, 0 } });
formats.Add(new Data() { name = "DOC", bytes = new byte[] { 13, 68, 79, 67 } });
formats.Add(new Data() { name = "PPT", bytes = new byte[] { 15, 0, 232, 8 } });
formats.Add(new Data() { name = "PDF", bytes = new byte[] { 37, 80, 68, 70 } });
formats.Add(new Data() { name = "7Z", bytes = new byte[] { 55, 122, 188, 175, 39, 28 } });
formats.Add(new Data() { name = "PSD", bytes = new byte[] { 56, 66, 80, 83 } });
formats.Add(new Data() { name = "JPG", bytes = new byte[] { 255, 216, 255, 224 } });
return formats.Where(x => content.SequenceEqual(x.bytes))
.Select(x => x.name)
.FirstOrDefault();

string extension = "";
foreach (Data format in formats)
{
for (int i = 0; i < format.bytes.Length; i++)
{

if (format.bytes[i] == content[i])
{
continue;

}
else

if (format.bytes[i] != content[i])
{
Console.WriteLine("Сравниваемые байты не равны");

}


}

extension = format.name;
Console.WriteLine(extension);
}

return extension;

}

}
}
Автор: xorvrn
Дата сообщения: 10.03.2014 01:12
WingfirE код примера вообще неверен.
0) Список сигнатур будет заполняться при каждом вызове метода. Это плохо.
1) Все, что идет после return formats.Where(x => content.SequenceEqual(x.bytes)).Select(x => x.name).FirstOrDefault();
выполняться не будет.
2) SequenceEqual сработает только при одинаковых объектах. А ты пытаешься сравнить файл (сигнатура + содержимое) с только сигнатурой, естественно это не одно и то же.
3) Условие if (format.bytes[i] == content[i]) {continue; }
лишнее, достаточно второго условия. Ну и хорошо бы проверять, что длинна контента больше или равна длине сигнатуры.


Код: using System;
using System.Collections.Generic;
using System.IO;

namespace ConsoleApplication9
{
class Program
{
static void Main()
{
byte[] content = File.ReadAllBytes(@"Z:\error.png"); // может быть опасным при попытке открыть большой файл. ЛУчше сделать считывание начала файла
Console.WriteLine(Data.Format(content));
Console.ReadLine();
}
}

struct Signature
{
public string Name;
public byte[] Bytes;
}

public static class Data
{
private static readonly List<Signature> Formats = new List<Signature>
{
new Signature {Name = "PNG", Bytes = new byte[] {137, 80, 78, 71, 13, 10, 26, 10}},
(new Signature {Name = "ACCDB", Bytes = new byte[] {0, 1, 0, 0, 83, 116, 97, 110, 100, 97, 114, 100, 32, 65, 67, 69, 32, 68, 66}}),
(new Signature {Name = "MDB", Bytes = new byte[] {0, 1, 0, 0, 83, 116, 97, 110, 100, 97, 114, 100, 32, 74, 101, 116, 32, 68, 66}}),
(new Signature {Name = "IMG", Bytes = new byte[] {0, 1, 0, 8, 0, 1, 0, 1, 1}}),
(new Signature {Name = "MDF", Bytes = new byte[] {0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 2, 0, 1}}),
(new Signature {Name = "PIC", Bytes = new byte[] {1, 0, 0, 0, 1}}),
(new Signature {Name = "MDF", Bytes = new byte[] {1, 15, 0, 0}}),
(new Signature {Name = "XLS", Bytes = new byte[] {9, 8, 16, 0, 0, 6, 5, 0}}),
(new Signature {Name = "DOC", Bytes = new byte[] {13, 68, 79, 67}}),
(new Signature {Name = "PPT", Bytes = new byte[] {15, 0, 232, 8}}),
(new Signature {Name = "PDF", Bytes = new byte[] {37, 80, 68, 70}}),
(new Signature {Name = "7Z", Bytes = new byte[] {55, 122, 188, 175, 39, 28}}),
(new Signature {Name = "PSD", Bytes = new byte[] {56, 66, 80, 83}}),
(new Signature {Name = "JPG", Bytes = new byte[] {255, 216, 255, 224}}),
};

public static string Format(byte[] content)
{
if (content == null || content.Length == 0) //можно поставить минимальную длинну сигнатуры
{
return "Пустой файл";
}
foreach (var signature in Formats)
{
if (signature.Bytes.Length > content.Length)
{
continue;
}
int i;
for (i = 0; i < signature.Bytes.Length; i++)
{
if (content[i] != signature.Bytes[i])
{
break;
}
}
if (i == signature.Bytes.Length)
{
return signature.Name;
}
}
return "Неизвестный тип файла";
}
}
}
Автор: kayoto
Дата сообщения: 11.03.2014 02:39
http://dc.ru-board.com/details.php?id=85399
Книга Эндрю Троелсена: Программирование на C# 5.0 и платформа NET 4.5 + приложения к книге.
Забирайте кому надо )
Автор: WingfirE
Дата сообщения: 11.03.2014 23:46
kayoto
А формат книги какой?
Автор: BlackVetal
Дата сообщения: 12.03.2014 05:08
kayoto
WingfirE
Для книг отдельная тема есть - здесь офтоп
Автор: WingfirE
Дата сообщения: 13.03.2014 21:23
xorvrn
Спасибо за помощь
Автор: WingfirE
Дата сообщения: 13.04.2014 14:47
Условие выполняется один раз в foeach

Код: if (Const = (Views & Bases) == Views)
{
if (Status == false)
{
//
}
if (Status == false)
break;
Status = true;
}
else
{
Status = false;
//
}
Автор: mxm1975
Дата сообщения: 13.04.2014 16:05
и где тут foreach?
Автор: WingfirE
Дата сообщения: 13.04.2014 17:59

Цитата:
и где тут foreach?

Вот здесь

Код: bool Const;
foreach(var Step in List)
{
var Bases =Step.Bases;
if (Const = (Views & Bases) == Views)
{
if (Status == false)
{
//
}
if (Status == false)
break;
Status = true;
}
else
{
Status = false;
//
}
Автор: mxm1975
Дата сообщения: 14.04.2014 02:20

Цитата:
Вот здесь


Спрашивать об инициализации Status бессмысленно? Осмелюсь предположить: срабатывает

Цитата:
if (Status == false)


и, далее, происходит выход из foreach по break


дополнительные вопросы:
- зачем так называть переменные? (Const, Status - с большой буквы и дублируя ключевые слова)
- зачем так инициализировать в условии? (с целью запутать вероятного противника)
- почему сразу не привести компилируемый код?
Автор: sewell
Дата сообщения: 14.04.2014 17:56
WingfirE

Цитата:
bool Const;
foreach(var Step in List)
{
var Bases =Step.Bases;
if (Const = (Views & Bases) == Views)
{                                                                                      
if (Status == false)
{
//
}
if (Status == false)
break;
Status = true;
}
else
{
Status = false;
//
}


Во-первых, после else или foreach нет закрывающейся скобки. Вероятно это проблемы копирования...
Во-вторых, если при входе в цикл переменная Status была false, то цикл завершиться и смена этой переменной Status на true не произойдет никогда:

Цитата:

if (Status == false)
        {
        //
        }
        if (Status == false)         
break;
        Status = true;

Кроме того, здесь идет лишнее дублирование кода. Проще

Цитата:

if (!Status)
        {
        //
break;
        }
        
        Status = true;

И здесь видно, что при изначальном ложном Status, установка переменной в true невозможна.
А также:

Цитата:

if (Const = (Views & Bases) == Views)

Присвоение переменной значения в операции проверки условия категорически не рекомендовано. Это ведет к запутыванию кода.
P.S. На самом деле, mxm1975 задал логичные вопросы. По правилам, не нами писанными, локальные переменные пишутся с маленькой буквы. Вместо if (Status == false), достаточно написать if (!Status) и т.п.
Автор: WingfirE
Дата сообщения: 24.04.2014 11:29
sewell
Спасибо
Автор: Zloy_Gelud
Дата сообщения: 18.05.2014 21:25
UPD. Вопрос решен.

Использую отладочный прокси Fiddler. В нем можно писать собственные скрипты вроде как на языке JScript.NET. Так вот, можете подсказать каким кодом можно добавить в этот JSON:

Код: {
"ver": 1,
"desc": "",
"time": "2014-05-18 16:44:22",
"code": 200,
"data": {
"User": {
"Param": {
"Items": [
{
"Location": "qw",
"Count": 1
},
{
"Location": "er",
"Count": 1
}
]
}
}
}
}
Автор: terra911
Дата сообщения: 22.05.2014 15:39
Dauren111
Можно решить следующим образом.
Написать небольшое winform/wpf приложение, через ClickOnce опубликовать его на сервер.
Текущую веб страницу входа переделать на страницу с двумя кнопками Run/Install и комментариями, инструкциями.
Таким образом, при нажатии кнопки Run, запустится это небольшое приложение, которое прочитает нужный текстовый файл, отправит его содержимое на сервер, и в зависимости от полученного результата, либо покажет какое-то сообщение, либо предложит ввести какие либо данные дополнительно, либо откроет окно браузера и перенаправит на страницу авто входа на сайт.
Автор: lerthe61
Дата сообщения: 23.05.2014 11:23

Цитата:
void

Для отслеживания изменений используй FileSystemWatcher
Для обновления значений используй ConfigurationManager.RefreshSection

WTF? Куда делся вопрос от Void?
Автор: Andryshok
Дата сообщения: 03.06.2014 00:30
Не знает ли кто как в ASP Net (.Net 4) вывести дерево каталогов с файлами определенной папки чтоб можно было файлы выбирать потом в нем например через чек бокс
Автор: AuronSV
Дата сообщения: 06.08.2014 09:41
Как в новой форме создать ленту (ribbon)?
Автор: mazafakermazafaka
Дата сообщения: 21.08.2014 14:21
AuronSV, как-то так
Автор: EgoPingvina
Дата сообщения: 07.09.2014 11:11
Ребятки, есть такой вопрос.
Какими ещё способами можно создавать экземпляр объекта, помиму использования new и Activator.CreateInstance ?
Автор: koreets2011
Дата сообщения: 27.09.2014 14:56
Добрый день, пишу первое приложение на WPF.
Возникла пара вопросов, касательно подвисания формы во время первого открытия.
Инициализацию IP телефона выполняю в отдельном потоке
Подключение к Серверу тоже в отдельный поток
Что заставляет подвисать форму, не пойму.

Код:
Imports System.Windows.Threading
Imports System.Threading
Class MainWindow

Private Current As System.Threading.SynchronizationContext ' Объявляю синхронизатор

Private Sub load(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Current = System.Threading.SynchronizationContext.Current ' синхронизатор потока
Dim potok_SoftPhone As New System.Threading.Thread(AddressOf sync_InitSIPServer) ' создаём новый поток
Dim potok_CliEnt_Server As New System.Threading.Thread(AddressOf sync_InitClient_Server) ' создаём новый поток
potok_SoftPhone.IsBackground = True ' делаем его фоновым
potok_CliEnt_Server.IsBackground = True ' делаем его фоновым
potok_CliEnt_Server.Start() ' Запускаем поток
potok_SoftPhone.Start() ' Запускаем поток
End Sub

Private Sub sync_InitSIPServer()
Current.Post(AddressOf InitSIPServer, True)
End Sub

Private Sub sync_InitClient_Server()
Current.Post(AddressOf InitClient_Server, True)
End Sub

Private Sub InitClient_Server(sender As Boolean)
If CLIENT.Connect("192.168.1.100", 13000, AscW("+")) Then ' Если подключение удачное шлем запрос серверу
CLIENT.Send("Start", "Hello!")
End If
End Sub

Private Sub InitSIPServer(sender As Boolean)
'Очень много кода
End Sub
End Class
Автор: SuPriTo
Дата сообщения: 27.10.2014 10:03
koreets2011
Либо исполняется код в контексте основной формы, либо слишком много ресурсов требуется на поток и основной поток не может прогрузить форму, вот она и тормозит.
Автор: Aenged
Дата сообщения: 04.11.2014 09:38
Здравствуйте. Заранее извиняюсь если не туда пишу. По информатике задали написать две программы на паскале. В чем ошибка? Вот первая программа: http://i68.fastpic.ru/big/2014/1104/5f/204ee730df130d4defd5ded0f8e8385f.png
Мне пишет: Error 85: ";" expected.

А вот вторая программа:http://i65.fastpic.ru/big/2014/1104/93/de9e05243aa11495868e8fb73169de93.png
В ней пишет Error: Unknown identifier.

Скажите пожалуйста, в чем ошибка?
Автор: mxm1975
Дата сообщения: 04.11.2014 20:15

Цитата:
в чем ошибка?


1. Тема "не та"
2. в конструкции while m<>do ошибка синтаксиса
3. не определены переменные w, s


Автор: zzz528
Дата сообщения: 25.11.2014 15:28
Здраствуйте, помогите разобраться: есть сs программа для .NET 4.5 - редактор ресурсов в zip формате.

Нажатия кнопки 5 секунд обрабатывается, а сжатие в zip файла 25мб занимает минут 10.
Возможно это из-за 100500 case в цикле? В си и asm много условных переходов в цикле тормозило, но можно было делать переход типа jmp dword ptr [eax]. Как в cs быть?


Или может дело в 4.5, что где поменять чтобы работало на 3.5 или на 2 даже?
Автор: landy
Дата сообщения: 30.11.2014 17:33
zzz528, имеет смысл погонять ее под профилировщиком. Дотнет, конечно, небыстрый код порождает, но не настолько, как ты пишешь.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.