Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void HowFileSave(string path,bool append)
- {
- if (!path.ToLower().EndsWith(".csv"))
- {
- path += ".csv";
- }
- var correctPath = Directory.GetParent(path).ToString();
- Directory.CreateDirectory(correctPath);
- FileSave(path, append);
- }
- private void FileSave(string path, bool appendFile)
- {
- var files = SeparateCsvToFiles(Rows, path);
- foreach (var file in files)
- {
- try
- {
- using (StreamWriter writer = new StreamWriter(file.Key, appendFile, Encoding.UTF8))
- {
- foreach (var row in file.Value)
- {
- writer.WriteLine(BuildCsvRow(row));
- }
- }
- }
- catch (Exception) { }
- }
- }
- private List<KeyValuePair<string, List<List<string>>>> SeparateCsvToFiles(List<List<string>> rows, string originalPath)
- {
- List<List<string>> rowsCopy = new List<List<string>>(rows);
- var files = new List<KeyValuePair<string, List<List<string>>>>();
- int counter = 1;
- Func<string> newpath = () => { return originalPath.Replace(".csv", counter++ + ".csv"); };
- if (rowsCopy.Count < MaxRowsInOneFile)
- {
- files.Add(new KeyValuePair<string, List<List<string>>>(originalPath, rowsCopy));
- }
- else
- {
- List<List<string>> fileRows;
- while (rowsCopy.Count > MaxRowsInOneFile)
- {
- fileRows = rowsCopy.GetRange(0, MaxRowsInOneFile);
- rowsCopy.RemoveRange(0, MaxRowsInOneFile);
- files.Add(new KeyValuePair<string, List<List<string>>>(newpath(), fileRows));
- }
- fileRows = rowsCopy.GetRange(0, rowsCopy.Count());
- files.Add(new KeyValuePair<string, List<List<string>>>(newpath(), fileRows));
- }
- return files;
- }
- private string BuildCsvRow(List<string> rowCells)
- {
- StringBuilder builder = new StringBuilder();
- bool firstColumn = true;
- foreach (string value in rowCells)
- {
- if (value != null)
- {
- if (!firstColumn)
- builder.Append(SeparatorChar);
- if (value.IndexOfAny(new char[] { '"', SeparatorChar }) != -1)
- {
- builder.AppendFormat("\"{0}\"", value.Replace("\"", "\"\""));
- }
- else
- {
- builder.Append(value);
- }
- firstColumn = false;
- }
- }
- return builder.ToString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement