想要在桌面或任何位置看到输出“data.csv”

public void CreateFileOutput(object parameter) { string workSheetName, targetFile; workSheetName = "data"; targetFile = "data.csv"; string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourceAppFilePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';"; OleDbConnection conn = null; StreamWriter wrtr = null; OleDbCommand cmd = null; OleDbDataAdapter da = null; try { conn = new OleDbConnection(strConn); conn.Open(); cmd = new OleDbCommand("SELECT * FROM [" + workSheetName + "$]", conn); cmd.CommandType = CommandType.Text; wrtr = new StreamWriter(targetFile); da = new OleDbDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); for (int x = 0; x < dt.Rows.Count; x++) { string rowString = ""; for (int y = 0; y < dt.Columns.Count; y++) { rowString += "\"" + dt.Rows[x][y].ToString() + "\","; } wrtr.WriteLine(rowString); } Console.WriteLine(); Console.WriteLine("Done! Your " + SourceAppFilePath + " has been converted into " + targetFile + "."); Console.WriteLine(); } catch (Exception exc) { Console.WriteLine(exc.ToString()); Console.ReadLine(); } finally { if (conn.State == ConnectionState.Open) conn.Close(); conn.Dispose(); cmd.Dispose(); da.Dispose(); wrtr.Close(); wrtr.Dispose(); } } 

XLS文件正在转换为csv.I能够看到,在for循环wrtr.WriteLine(rowString); 但我想在桌面上看到最终的输出文件“Data.csv” ,因为我正在从桌面上获取源.xls文件。 为我提供解决scheme。 谢谢。

您需要使用完整path将文件保存到桌面。 您可以使用Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory ,如下所示:

 string targetFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string targetPath = Path.Combine(targetFolder, "Data.csv"); 

然后用完整path使用FileStream:

 fs = new FileStream(targetPath, FileMode.Create); 

下面按照每条评论编辑

关键是指定要保存文件的path。 只要提供一个文件名就会把它放在应用程序正在删除的目录中。 一个简单的方法就是使用Path类的GetDirectoryName方法。 假设文件被传入,从configuration文件读取,硬编码等:

string path = Path.GetDirectoryName(sourceFile); string target = path + @“\”+“Data.csv”;

如果sourceFile是C:\ Data \ Input.xml,则path将等于“C:\ Data”,目标将是C:\ Data \ Data.csv。

这样做的好处是你可以传递一个文件名和path,它总是将目标文件放在同一个位置。 这很好地适用于方法的参数化,或者甚至让用户通过OpenFileDialog框或类似的机制来select文件。

额外编辑每约翰的评论

根据您发布的代码,Data.xsl文件位于正在执行的应用程序的文件夹中。 在这种情况下,您只需要执行以下操作:

 fs = new FileStream("data.csv", FileMode.Create); 

不需要弄乱path,因为文件stream也会进入正在执行的应用程序的目录。

最后,所有关于使用源文件中提供的信息(即位置/path数据)并将其应用到目标文件的完整path和名称。