【发布时间】:2015-08-13 01:44:01
【问题描述】:
我正在编写一个读取 Ia 目录内容并将其写入 csv 文件的应用程序。我正在尝试从中获取某些文件扩展名的列表并上传包含 csv 文件的路径,并将过滤后的扩展名列表写入新的 csv 文件。 我不知道如何编写过滤后的 csv 文件..... 这是我的方法。
StringBuilder CreateUserFileUploadList(SLDocument document, StringBuilder destroyWorksheet) { document.SelectWorksheet("用户文件夹"); var stats = document.GetWorksheetStatistics(); var rowcount = stats.EndRowIndex + 1; 列出不需要的Extensions = cblExtensions.Items.Cast().Where(li => li.Selected).Select(li => li.Text).ToList(); if (!String.IsNullOrEmpty(tbOtherExtensions.Text)) { 不需要的Extensions.AddRange(tbOtherExtensions.Text.ToUpper().Split(new char[] { ',', ' ', '.' }, StringSplitOptions.RemoveEmptyEntries)); } 不需要的Extensions.AddRange("EXE,COM,BAT,JS,VBS,PIF,CMD,DLL,OCX,PWL".Split(new char[] { ',', ' ', '.' }, StringSplitOptions.RemoveEmptyEntries)) ; // 新的 CSV 文件 var workSheet = new StringBuilder(); workSheet.AppendLine("FILEPATH,Client,Matter,LAST MODIFIED DATE,CREATED DATE,CREATED BY,LAST MODIFIED BY,FOLDER,DOCUMENT NAME,Author,Practice Area,Document Type,ACCESS,Keywords - Comments"); // 遍历目录 for (int i = 2; i 100 个字符,或包括 TAB / \ : * ?" | // 文件夹的文件夹>500 或文件>1000 //TODO: 这个循环遍历叶子文件夹;我们需要检查中间文件夹以确保它们没有太多的文件或文件夹或坏名 //取出@"\", bool invalidFolderName = new string[] { "/", ":", "*", "?", "" }.Any(s => directoryName.Contains(s)); if (invalidFolderName || directoryName.Length > 200 || files.Count() > 1000) { System.Diagnostics.Debug.WriteLine("无效文件夹:" + directoryName); lblError.Text = lblError.Text + "\r\n" + "无效文件夹:" + directoryName; //TODO: 这应该会导致整个上传失败 } // 构建目标文件夹路径 字符串文件夹; string[] stringSeparators = new string[] { tbAuthor.Text }; var path = directoryName.Split(stringSeparators, StringSplitOptions.None); 文件夹 = path.Last(); 如果 (path.Count() > 1) { 文件夹 = ConfigurationManager.AppSettings["NetDocumentsFolderPath"].ToString() + tbAuthor.Text + @"\User Folder" + 文件夹; if (folder.Substring(folder.Length - 1, 1) == @"\") { 文件夹 = folder.Substring(0, folder.Length - 1); } } // 获取文件 foreach(文件中的 var 文件) { // 删除不需要的扩展 if (!unwantedExtensions.Contains(file.Extension.Replace(".", "").ToUpper())) { var access = file.GetAccessControl(); 字符串用户 = access.GetOwner(typeof(System.Security.Principal.NTAccount)).ToString(); //TODO: FWIW, fileName (on netdocs) 不需要匹配原始位置的名称... 字符串全名 = 文件。全名; 字符串文件名 = 文件名; // 如果有任何无效字符,请用引号括起来 if (fullName.IndexOfAny(csvTokens) >= 0) { fullName = "\"" + fullName.Replace("\"", "\"\"") + "\""; } if (fileName.IndexOfAny(csvTokens) >= 0) { 文件名 = "\"" + fileName.Replace("\"", "\"\"") + "\""; } if (!document.GetCellValueAsString(i, 2).ToUpper().Contains("DESTROY")) { String practiceArea = GetPracticeAreaForClientMatter(document.GetCellValueAsString(i, 2), document.GetCellValueAsString(i, 3)); String documentType = ConfigurationManager.AppSettings["FileDocumentType"].ToString(); // 验证文件 // 无效的文件名(>200 个字符,或 TAB / \ : * ? " | // 无效的文件大小 (>200 MB) bool invalidFileName = new string[] { "/", @"\", ":", "*", "?", "" }.Any(s => file.Name.Contains(s)); if (invalidFileName || file.Length > 200000000 || file.Name.Length > 200) { System.Diagnostics.Debug.WriteLine("无效文件:" + file.Name); lblError.Text = lblError.Text + "\r\n" + "无效文件:" + file.Name; //TODO: 这应该会导致整个上传失败 } 别的 { workSheet.AppendLine( 全名 + "," + document.GetCellValueAsString(i, 2) + "," + document.GetCellValueAsString(i, 3) + "," + 文件.LastWriteTime + "," + file.CreationTime + "," + tbAuthor.Text + "," + tbAuthor.Text + "," + 文件夹 + "," + 文件名 + "," + tbAuthor.Text + "," + 练习区 + "," + 文档类型 + "," + 练习区 + "|V," + "从已故律师处导入:" + DateTime.Now.ToString("G")); } } 别的 { destroyWorksheet.AppendLine(fullName); } } } }【问题讨论】:
-
那是很多代码。我不确定实际的问题是什么。没有生成文件?它已生成,但数据不正确?你认为你可以简化你的代码来演示问题吗(换句话说,提供一个MCVE)?
-
找到答案了!!!
标签: c# .net export-to-csv