public CorrectTaskReturn StartCorrect(HWPathHelper HWFilePath, string assignmentPath, Program_Answer answer)
        {
            AnswerPathHelper  CorrectAnswer = new AnswerPathHelper(answer.cAnswer_Input);
            string            filename;
            CorrectTaskReturn FinalResult;
            CorrectTaskResult compilationResult;
            CorrectTaskResult executionResult;

            filename             = Path.GetFileNameWithoutExtension(assignmentPath);
            FinalResult          = new CorrectTaskReturn();
            compilationResult    = new CorrectTaskResult();
            executionResult      = new CorrectTaskResult();
            compilationResult    = CorrectTaskHelper.compileprogram(HWFilePath, assignmentPath);
            FinalResult.resultID = filename;

            if (compilationResult.Success)
            {
                FinalResult.IsCompilationSuccess = true;
                DirectoryInfo direct = new DirectoryInfo(CorrectAnswer.AnswerInputFilePath);
                int           count  = 0;
                foreach (var file in direct.GetFiles(answer.cQID + "-*.txt"))
                {
                    count++;
                    string testnum = file.Name.Replace(".txt", "").Substring(file.Name.Replace(".txt", "").IndexOf("-"));
                    executionResult = CorrectTaskHelper.executeprogram(HWFilePath, filename, CorrectAnswer.AnswerInputFilePath + @"\" + file.Name);
                    if (executionResult.Success)
                    {
                        CorrectTaskHelper.adjustoutput(HWFilePath, filename + testnum);
                        CorrectTaskHelper.comparefile(HWFilePath, filename + testnum, CorrectAnswer.AnswerFilePath + @"\" + file.Name);
                        FinalResult.IsExecutionSuccess.Add(true);
                        FinalResult.IsComparsionSuccess.Add(CorrectTaskHelper.PassOrNot(HWFilePath, filename + testnum));
                        FinalResult.addcomparsion(CorrectTaskHelper.PassOrNot(HWFilePath, filename + testnum));
                    }
                    else
                    {
                        FinalResult.ExecutionErrorMessage += "測試" + testnum + @"執行錯誤:" + executionResult.errorMessage + "\r\n";
                    }
                }
                FinalResult.testnum = count;
            }
            else
            {
                FinalResult.ComplationErrorMessage = compilationResult.errorMessage;
            }

            return(FinalResult);
        }
        public string CorrectTask(string ProgramFilePath, string cQID, string StuProgramFN, string questionNum)
        {
            try
            {
                List <HW_Exam>         StuHW   = new List <HW_Exam>();
                List <StuCouHWDe_prog> StuHWDe = new List <StuCouHWDe_prog>();
                Program_Answer         answer;

                if (StuProgramFN == "all")
                {
                    HWPathHelper HWFilePath = new HWPathHelper(ProgramFilePath);
                    HWFilePath.HWPathdir();
                    answer = this.Answerrepository.Get(x => x.cQID == cQID);
                    AnswerPathHelper         CorrectAnswer = new AnswerPathHelper(answer.cAnswer_Input);
                    List <string>            fileFullname  = new List <string>();
                    string                   fileName;
                    List <CorrectTaskReturn> FinalResult = new List <CorrectTaskReturn>();
                    DirectoryInfo            direct      = new DirectoryInfo(HWFilePath.HWProgFilePath);
                    foreach (var file in direct.EnumerateFiles("*.cpp", SearchOption.AllDirectories))
                    {
                        if (file.Name.IndexOf("afterMF") == -1)
                        {
                            fileFullname.Add(file.FullName);
                            fileName = Path.GetFileNameWithoutExtension(file.FullName);
                            StuCouHWDe_prog getdata = this.StuCouHWDerepository.Get(x => x.StuProgramFN == fileName);
                            StuHW.Add(this.HWrepository.Get(x => x.StuCouHWDe_ID == getdata.StuCouHWDe_ID));
                            StuHWDe.Add(getdata);
                        }
                    }
                    Parallel.ForEach(fileFullname, (onefile, loopState) =>
                    {
                        FinalResult.Add(StartCorrect(HWFilePath, onefile, answer));
                    });
                    foreach (var result in FinalResult)
                    {
                        StuCouHWDe_prog StuHWDeNow = StuHWDe.Find(x => x.StuProgramFN == result.resultID);
                        HW_Exam         StuHWNow   = StuHW.Find(x => x.StuCouHWDe_ID == StuHWDeNow.StuCouHWDe_ID);
                        StuHWNow.HW_Exam_grade       = result.score(questionNum);
                        StuHWDeNow.Pass_compilation  = result.ComplationErrorMessage;
                        StuHWDeNow.Success_execution = result.ExecutionErrorMessage;
                        StuHWDeNow.Compare_situation = result.compareresult.TrimEnd(',');
                        this.HWrepository.Update(StuHWNow);
                        this.StuCouHWDerepository.Update(StuHWDeNow);
                    }
                }
                else
                {
                    HWPathHelper HWFilePath = new HWPathHelper(ProgramFilePath);
                    HWFilePath.HWPathdir();
                    answer = this.Answerrepository.Get(x => x.cQID == cQID);
                    AnswerPathHelper  CorrectAnswer = new AnswerPathHelper(answer.cAnswer_Input);
                    DirectoryInfo     direct        = new DirectoryInfo(HWFilePath.HWProgFilePath);
                    string            fileName;
                    CorrectTaskReturn FinalResult = new CorrectTaskReturn();
                    foreach (var file in direct.EnumerateFiles(StuProgramFN + ".cpp", SearchOption.AllDirectories))
                    {
                        if (file.Name.IndexOf("afterMF") == -1)
                        {
                            StuCouHWDe_prog StuHWDeNow = StuHWDe.Find(x => x.StuProgramFN == FinalResult.resultID);
                            HW_Exam         StuHWNow   = StuHW.Find(x => x.StuCouHWDe_ID == StuHWDeNow.StuCouHWDe_ID);
                            fileName                     = Path.GetFileNameWithoutExtension(file.FullName);
                            FinalResult                  = StartCorrect(HWFilePath, file.FullName, answer);
                            StuHWNow.HW_Exam_grade       = FinalResult.score(questionNum);
                            StuHWDeNow.Pass_compilation  = FinalResult.ComplationErrorMessage;
                            StuHWDeNow.Success_execution = FinalResult.ExecutionErrorMessage;
                            StuHWDeNow.Compare_situation = FinalResult.compareresult.TrimEnd(',');
                            this.HWrepository.Update(StuHWNow);
                            this.StuCouHWDerepository.Update(StuHWDeNow);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                return("Some errors happen in the process when marking Programs!");
            }
            return("It is success when marking Programs!");
        }