[英]Return the pathname after saving file using saveFileDialog - C#
我正在使用 saveFileDialog 创建和保存 csv 文件。 我需要找到一种方法来记住该人将文件保存到的路径名,以便稍后在代码中使用该文件的路径名。
下面的代码是我一直在尝试的,只是为了返回 pathName 但它实际上只会返回sfd.FileName
。 有没有办法获得完整的路径?
private void saveCSVbutton_Click(object sender, EventArgs e)
{
saveShipping();
saveATT();
saveVerizon();
String shippingPath = saveShipping();
MessageBox.Show(shippingPath);
}
private String saveShipping()
{
if (dataGridView1.Rows.Count > 0)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "CSV (*.csv)|*.csv";
sfd.FileName = "shippingOutput.csv";
bool fileError = false;
if (sfd.ShowDialog() == DialogResult.OK)
{
if (File.Exists(sfd.FileName))
{
try
{//overwrite file
File.Delete(sfd.FileName);
}
catch (IOException ex)
{
fileError = true;
MessageBox.Show("It wasn't possible to write the data to the disk." + ex.Message);
}
}
if (!fileError)
{
try
{
int columnCount = dataGridView1.Columns.Count;
string columnNames = "";
string[] outputCsv = new string[dataGridView1.Rows.Count + 1];
for (int i = 0; i < columnCount; i++)
{
columnNames += dataGridView1.Columns[i].HeaderText.ToString() + ",";
}
outputCsv[0] += columnNames;
for (int i = 1; i < dataGridView1.Rows.Count; i++)
{
for (int j = 0; j < columnCount; j++)
{
outputCsv[i] += dataGridView1.Rows[i - 1].Cells[j].Value.ToString() + ",";
}
}
File.WriteAllLines(sfd.FileName, outputCsv, Encoding.UTF8);
MessageBox.Show("Data Exported Successfully", "Info");
String attachPathName = sfd.FileName;
}
catch (Exception ex)
{
MessageBox.Show("Error :" + ex.Message);
}
}
}
}
else
{
MessageBox.Show("No Record To Export", "Info");
}
return attachPathName;
}
您可以使用Path.GetDirectoryName(sfd.FileName)
获取文件的完整路径
我能想到两种方法可以让你保持简单,但它们的工作方式相同,这取决于你的要求。 我将称之为方法 1 和 2。
方法一。
Preslave Tsenov 有一个很好的答案来保持直截了当,但是我注意到您的 SaveFileDialogue sfd 变量正在从方法中声明和实例化。 所以简而言之,您将无法从方法块外部访问它。
如果将变量移动到构造函数的正上方并将其声明为公共(您希望从类内部和外部访问变量)或私有(您只想从类内部访问变量)。 完成此操作后,您应该可以随时调用该变量。
您的代码将看起来像这样
public SaveFileDialog sfd = new SaveFileDialog();
private void saveCSVbutton_Click(object sender, EventArgs e)
{
saveShipping();
saveATT();
saveVerizon();
String shippingPath = saveShipping();
MessageBox.Show(shippingPath);
}
private String saveShipping()
{
if (dataGridView1.Rows.Count > 0)
{
sfd.Filter = "CSV (*.csv)|*.csv";
sfd.FileName = "shippingOutput.csv";
bool fileError = false;
if (sfd.ShowDialog() == DialogResult.OK)
{
if (File.Exists(sfd.FileName))
{
try
{//overwrite file
File.Delete(sfd.FileName);
}
catch (IOException ex)
{
fileError = true;
MessageBox.Show("It wasn't possible to write the data to the disk." + ex.Message);
}
}
if (!fileError)
{
try
{
int columnCount = dataGridView1.Columns.Count;
string columnNames = "";
string[] outputCsv = new string[dataGridView1.Rows.Count + 1];
for (int i = 0; i < columnCount; i++)
{
columnNames += dataGridView1.Columns[i].HeaderText.ToString() + ",";
}
outputCsv[0] += columnNames;
for (int i = 1; i < dataGridView1.Rows.Count; i++)
{
for (int j = 0; j < columnCount; j++)
{
outputCsv[i] += dataGridView1.Rows[i - 1].Cells[j].Value.ToString() + ",";
}
}
File.WriteAllLines(sfd.FileName, outputCsv, Encoding.UTF8);
MessageBox.Show("Data Exported Successfully", "Info");
String attachPathName = sfd.FileName;
}
catch (Exception ex)
{
MessageBox.Show("Error :" + ex.Message);
}
}
}
}
else
{
MessageBox.Show("No Record To Export", "Info");
}
return attachPathName;
}
方法 2您可以创建一个名为“SessionVariables.cs”的新 class 和一个“SaveFileDialog sfd = new SaveFileDialog();” 变量并将其声明为公共。 然后,您可以随时获取和设置该值。
我见过一些开发人员使用这种方法,特别是 VB 开发人员,但它仍然适用于 C#。 请记住不要在每次使用时都实例化一个新的 SaveFileDialog,否则每次都会清除这些值。
我希望这对您有用,或者至少让您更接近解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.