AskalotLearnalot Ответов: 2

Индекс находился за пределами массива ASP.NET


Я получаю ошибку, упомянутую в названии. Причина: массив должен возвращать 3 элемента, но эти элементы не передаются в массив. Не знаю почему. Вот код тогда я задам прямой вопрос:
public void barcodereader()
    {
        string str = string.Empty;
         string strImage = string.Empty;
         string strBarCode = string.Empty;
        DirectoryInfo foldersInsideDropHere = new DirectoryInfo(@"C:\Users\name\Desktop\images\DropHere");
        DirectoryInfo[] foldersInsideDropHereSave = foldersInsideDropHere.GetDirectories();
        foreach (DirectoryInfo Folder in foldersInsideDropHereSave)
        {
            string dropHereFolders = Folder.Name;
            DirectoryInfo dir = new DirectoryInfo(Path.Combine(@"C:\Users\name\Desktop\images\DropHere\", dropHereFolders));
             string fulldirectory = dir.FullName;
            FileInfo[] dropHereSubDirectoriesfiles = dir.GetFiles();
            foreach (FileInfo dropHereSubDirectoriesfile in dropHereSubDirectoriesfiles)
            {
                if (dir != null)
                {
                    Bitmap bitmap = null;
                    try
                    {
                        bitmap = new Bitmap(dropHereSubDirectoriesfile.FullName);
                    }
                    catch (Exception ex)
                    {
                        ex.ToString();
                    }
                    if (bitmap == null)//If file is not image return error message to use "your folder contains non image files please remove and retry"

                    {
                        str = "Your folder contains non image files please remove and retry";
                    }
                    else
                    {
                        strImage = "something";
                        strBarCode = ReadBarcodeFromFile(Path.Combine(fulldirectory, dropHereSubDirectoriesfile.Name));
                    }
                }
            }
        }
    }
    public String ReadBarcodeFromFile(string _Filepath)
    {

            String[] barcodes = BarcodeScanner.Scan(_Filepath, BarcodeType.Code39);//Issue is here this array stays 0
            return barcodes[0];// error here


    }


Это метод, который я вызываю из контроллера в контроллере, который у меня есть:
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Index(string str, string strBarCode, string strImage)
        {
            

            Methods Method0 = new Methods();
            Method0.barcodereader();
          
            ViewBag.ErrorMessage = str;
            ViewBag.BarCode = strBarCode;
            ViewBag.BarImage = strImage;
            return View();
            
        }


Вопрос: как я передаю эти элементы или что я делаю неправильно?

Что я уже пробовал:

Я попытался отладить, чтобы найти проблему и дополнительную информацию о ней.

2 Ответов

Рейтинг:
12

AskalotLearnalot

Сканер штрих-кодов ищет штрих-коды в этом случае, если он находит штрих-код, он возвращает 3 необходимых элемента. Однако если это не так, то он возвращает пустой массив. Поэтому все, что нам нужно сделать, это добавить утверждение if else.

public String ReadBarcodeFromFile(string _Filepath)
    {
if(barcodes.Length!= 0)
{
            String[] barcodes = BarcodeScanner.Scan(_Filepath, BarcodeType.Code39);//Issue is here this array stays 0
            return barcodes[0];// error here
}
else
{
return false;
}

    }

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


Рейтинг:
0

OriginalGriff

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

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


AskalotLearnalot

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