private void SplitFileByLength(int length) { //Encoding encoding = null; length = length - 100; //100个字的Buffer //string str = FileOperationHelper.ReadFileContent(txbFilePath.Text, ref encoding, Encoding.UTF8); Encoding encoding = FileOperationHelper.GetEncodingType(txbFilePath.Text); string str = FileOperationHelper.ReadFile(txbFilePath.Text, encoding); int fileIndex = 1; do { if (str.Length == 0) { break; } string content = str.Substring(0, Math.Min(str.Length, length)); str = str.Substring(content.Length); int i = Math.Min(str.IndexOf('\r'), str.IndexOf('\n')); if (i != -1) { content += str.Substring(0, i + 2); str = str.Substring(i + 2); } string newFile = GetWriteFilePath(fileIndex++); FileOperationHelper.WriteFile(newFile, encoding, content); rtbLogs.AppendText(newFile + "\r\n"); } while (true); }
public void TestGetFileEncoding(string path, string encoding) { var e = FileOperationHelper.GetEncodingType(path); Assert.AreEqual(e.ToString(), Encoding.GetEncoding(encoding).ToString()); var txt = FileOperationHelper.ReadFile(path); Debug.WriteLine(txt); }
public void TestGetFileEncoding(string path, string encoding) { path = GetFullPath(path); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var e = FileOperationHelper.GetEncodingType(path); Assert.AreEqual(e.EncodingName, Encoding.GetEncoding(encoding).EncodingName); var txt = FileOperationHelper.ReadFile(path); Debug.WriteLine(txt); }
private void SplitFileBySize(int maxSize) { Encoding encoding = FileOperationHelper.GetEncodingType(txbFilePath.Text); int fileIndex = 1; int size = (maxSize - 10) * 1024; //10K的Buffer var inFile = new FileStream(txbFilePath.Text, FileMode.Open, FileAccess.Read); do { string newFile = GetWriteFilePath(fileIndex++); var outFile = new FileStream(newFile, FileMode.OpenOrCreate, FileAccess.Write); if (fileIndex != 2) //不是第一个文件,那么就要写文件头 { FileOperationHelper.WriteFileHeader(outFile, encoding); } int data = 0; var buffer = new byte[size]; if ((data = inFile.Read(buffer, 0, size)) > 0) { outFile.Write(buffer, 0, data); bool hasContent = true; do { int b = inFile.ReadByte(); if (b == 0xA || b == 0xD) { ReadToNextLine(inFile); hasContent = false; } if (b != -1) //文件已经读完 { outFile.WriteByte((byte)b); } else { hasContent = false; } } while (hasContent); } outFile.Close(); rtbLogs.AppendText(newFile + "\r\n"); } while (inFile.Position != inFile.Length); inFile.Close(); }
private void SplitFileByLine(int maxLine) { Encoding encoding = FileOperationHelper.GetEncodingType(txbFilePath.Text); string str = FileOperationHelper.ReadFile(txbFilePath.Text, encoding); string splitLineChar = "\r\n"; if (str.IndexOf(splitLineChar) < 0) { if (str.IndexOf('\r') > 0) { splitLineChar = "\r"; } else if (str.IndexOf('\n') > 0) { splitLineChar = "\n"; } else { MessageBox.Show("不能找到行分隔符"); return; } } string[] list = str.Split(new[] { splitLineChar }, StringSplitOptions.RemoveEmptyEntries); var fileContent = new StringBuilder(); int fileIndex = 1; for (int i = 0; i < list.Length; i++) { fileContent.Append(list[i]); fileContent.Append(splitLineChar); if ((i + 1) % maxLine == 0 || i == list.Length - 1) { if (i != 0) { string newFile = GetWriteFilePath(fileIndex++); FileOperationHelper.WriteFile(newFile, encoding, fileContent.ToString()); rtbLogs.AppendText(newFile + "\r\n"); fileContent = new StringBuilder(); } } } }