Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Условие для возвращения нужного значения


Рекомендуемые сообщения


Можете подсказать какое условие нужно указать, чтобы возвращалось нужное значение, а не первое попавшееся.

В конкретном примере нужно значение 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 == content)

{

continue;

}

else

if (format.bytes != content)

{

Console.WriteLine("Сравниваемые байты не равны");

}

}

extension = format.name;

Console.WriteLine(extension);

}

return extension;

}

}

}

Ссылка на комментарий
Поделиться на другие сайты

У Вас, видимо, много раз выдает "Сравниваемые байты не равны", после чего format.name остается неопределённым. В частности psd.

После проведенной проверки по выходу их Foreach нигде нет определённости совпадения заголовочной части.

Может быть, вместо побайтного перебора вырезать кусок нужной длины и сравнивать один раз для каждого типа файла и в случае успеха приравнивать тип (имя).

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...