private void AddProjectExcuted(object sender, ExecutedRoutedEventArgs e) { if (practicalFile.Projects.Count > 0) { practicalFile.Projects[practicalFile.Projects.Count - 1].IsLast = false; } PracticalProject project = new PracticalProject(); project.IsLast = true; project.Index = practicalFile.Projects.Count; practicalFile.Projects.Add(project); }
private void LoadPractical(string practicalFilePath) { FileStream fs = null; byte[] buffer = null; PracticalFile[] items = null; int[] practicalProjectCountArray = null; int[][] practicalProjectContentBufferLengthArray = null; int[][] practicalProjectF1BufferLengthArray = null; int[] practicalProjectF2BufferLengthArray = null; int[] practicalNameBufferLength = null; int[] practicalAutographCount = null; long[] practicalContentBufferLength = null; try { fs = new FileStream(practicalFilePath, FileMode.Open, FileAccess.Read); buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); items = new PracticalFile[BitConverter.ToInt32(buffer, 0)]; practicalProjectCountArray = new int[items.Length]; practicalProjectContentBufferLengthArray = new int[items.Length][]; practicalProjectF1BufferLengthArray = new int[items.Length][]; practicalProjectF2BufferLengthArray = new int[items.Length]; practicalNameBufferLength = new int[items.Length]; practicalAutographCount = new int[items.Length]; practicalContentBufferLength = new long[items.Length]; for (int i = 0; i < items.Length; i++) { items[i] = new PracticalFile(); } for (int i = 0; i < items.Length; i++) { buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); practicalAutographCount[i] = BitConverter.ToInt32(buffer, 0); } for (int i = 0; i < items.Length; i++) { buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); practicalProjectCountArray[i] = BitConverter.ToInt32(buffer, 0); practicalProjectContentBufferLengthArray[i] = new int[practicalProjectCountArray[i]]; practicalProjectF1BufferLengthArray[i] = new int[practicalProjectCountArray[i]]; } for (int i = 0; i < items.Length; i++) { for (int j = 0; j < practicalProjectCountArray[i]; j++) { PracticalProject project = new PracticalProject(); project.Index = j; items[i].Projects.Add(project); } } for (int i = 0; i < items.Length; i++) { for (int j = 0; j < practicalProjectCountArray[i]; j++) { buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); practicalProjectContentBufferLengthArray[i][j] = BitConverter.ToInt32(buffer, 0); } } for (int i = 0; i < items.Length; i++) { for (int j = 0; j < practicalProjectCountArray[i]; j++) { buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); practicalProjectF1BufferLengthArray[i][j] = BitConverter.ToInt32(buffer, 0); } } for (int i = 0; i < items.Length; i++) { buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); practicalProjectF2BufferLengthArray[i] = BitConverter.ToInt32(buffer, 0); } for (int i = 0; i < items.Length; i++) { buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); practicalNameBufferLength[i] = BitConverter.ToInt32(buffer, 0); } for (int i = 0; i < items.Length; i++) { buffer = new byte[sizeof(long)]; fs.Read(buffer, 0, buffer.Length); practicalContentBufferLength[i] = BitConverter.ToInt64(buffer, 0); } for (int i = 0; i < items.Length; i++) { for (int j = 0; j < practicalProjectCountArray[i]; j++) { buffer = new byte[practicalProjectContentBufferLengthArray[i][j]]; fs.Read(buffer, 0, buffer.Length); items[i].Projects[j].Content = UTF8Encoding.UTF8.GetString(buffer); } } for (int i = 0; i < items.Length; i++) { for (int j = 0; j < practicalProjectCountArray[i]; j++) { buffer = new byte[practicalProjectF1BufferLengthArray[i][j]]; fs.Read(buffer, 0, buffer.Length); items[i].Projects[j].HelperText = UTF8Encoding.UTF8.GetString(buffer); } } for (int i = 0; i < items.Length; i++) { buffer = new byte[practicalProjectF2BufferLengthArray[i]]; fs.Read(buffer, 0, buffer.Length); items[i].HelperText = UTF8Encoding.UTF8.GetString(buffer); } for (int i = 0; i < items.Length; i++) { for (int j = 0; j < practicalAutographCount[i]; j++) { Autograph autograph = new Autograph(); buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); buffer = new byte[BitConverter.ToInt32(buffer, 0)]; fs.Read(buffer, 0, buffer.Length); autograph.SheetName = UTF8Encoding.UTF8.GetString(buffer); buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); autograph.RowIndex = BitConverter.ToInt32(buffer, 0); buffer = new byte[sizeof(int)]; fs.Read(buffer, 0, buffer.Length); autograph.ColIndex = BitConverter.ToInt32(buffer, 0); items[i].Autographs.Add(autograph); } } for (int i = 0; i < items.Length; i++) { buffer = new byte[practicalNameBufferLength[i]]; fs.Read(buffer, 0, buffer.Length); items[i].Index = i; items[i].Name = UTF8Encoding.UTF8.GetString(buffer); items[i].Path = System.IO.Path.Combine(loadPracticalFileFolder, items[i].Name + ".xls"); for (int j = 0; j < practicalProjectCountArray[i]; j++) { items[i].Projects[j].PracticalName = items[i].Name; } } for (int i = 0; i < items.Length; i++) { FileStream writeFs = null; try { writeFs = new FileStream(items[i].Path, FileMode.Create, FileAccess.Write); while (writeFs.Length != practicalContentBufferLength[i]) { buffer = new byte[practicalContentBufferLength[i] - writeFs.Length > BUFFER_PACKAGE_LENGTH ? BUFFER_PACKAGE_LENGTH : practicalContentBufferLength[i] - writeFs.Length]; fs.Read(buffer, 0, buffer.Length); writeFs.Write(buffer, 0, buffer.Length); } } catch { throw; } finally { if (writeFs != null) { writeFs.Dispose(); } } } for (int i = 0; i < items.Length; i++) { files.Add(items[i]); } } catch { throw new Exception("题库加载错误。"); } finally { if (fs != null) { fs.Dispose(); } } }