Return 使用 saveFileDialog 保存文件后的路径名 - C#
Return the pathname after saving file using saveFileDialog - C#
我正在使用 saveFileDialog 创建并保存一个 csv 文件。我需要找到一种方法来记住此人将文件保存到的路径名,以便我稍后可以在代码中使用该文件的路径名。
下面的代码是我一直在尝试的,只是 return 路径名,但它实际上只会 returning 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)
获取文件的完整路径
我能想到有 2 种方法可以让您的操作变得简单,但它们的工作方式相同,这取决于您的要求。我将把它称为方法 1 和 2。
方法一.
Preslave Tsenov 有一个很好的答案来保持直截了当,但是我注意到你的 SaveFileDialogue sfd 变量是从方法中声明和实例化的。所以简而言之,您将无法从方法块外部访问它。
如果您将变量移动到构造函数的正上方并将其声明为 Public(您希望从 class 内部和外部访问变量)或声明为 Private(您只希望访问到 class 中的变量)。完成后,您应该可以随时调用变量。
您的代码将如下所示
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;
}
方法二
您可以创建一个名为“SessionVariables.cs”的新 class 和一个“SaveFileDialog sfd = new SaveFileDialog();”变量并将其声明为 public。然后您可以随时获取和设置该值。
我见过一些开发人员使用这种方法,特别是 VB 开发人员,但它仍然适用于 C#。请记住不要在每次使用时都实例化一个新的 SaveFileDialog,否则每次都会清除这些值。
我希望这对您有用,或者至少让您更接近解决方案。
我正在使用 saveFileDialog 创建并保存一个 csv 文件。我需要找到一种方法来记住此人将文件保存到的路径名,以便我稍后可以在代码中使用该文件的路径名。
下面的代码是我一直在尝试的,只是 return 路径名,但它实际上只会 returning 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)
获取文件的完整路径
我能想到有 2 种方法可以让您的操作变得简单,但它们的工作方式相同,这取决于您的要求。我将把它称为方法 1 和 2。
方法一.
Preslave Tsenov 有一个很好的答案来保持直截了当,但是我注意到你的 SaveFileDialogue sfd 变量是从方法中声明和实例化的。所以简而言之,您将无法从方法块外部访问它。
如果您将变量移动到构造函数的正上方并将其声明为 Public(您希望从 class 内部和外部访问变量)或声明为 Private(您只希望访问到 class 中的变量)。完成后,您应该可以随时调用变量。
您的代码将如下所示
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;
}
方法二 您可以创建一个名为“SessionVariables.cs”的新 class 和一个“SaveFileDialog sfd = new SaveFileDialog();”变量并将其声明为 public。然后您可以随时获取和设置该值。
我见过一些开发人员使用这种方法,特别是 VB 开发人员,但它仍然适用于 C#。请记住不要在每次使用时都实例化一个新的 SaveFileDialog,否则每次都会清除这些值。
我希望这对您有用,或者至少让您更接近解决方案。