我正在使用 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;
}
uj5u.com熱心網友回復:
我能想到兩種方法可以讓你保持簡單,但它們的作業方式相同,這取決于你的要求。我將稱之為方法 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”的新類和一個“SaveFileDialog sfd = new SaveFileDialog();” 變數并將其宣告為公共。然后,您可以隨時獲取和設定該值。
我見過一些開發人員使用這種方法,特別是 VB 開發人員,但它仍然適用于 C#。請記住不要在每次使用時都實體化一個新的 SaveFileDialog,否則每次都會清除這些值。
我希望這對您有用,或者至少讓您更接近解決方案。
uj5u.com熱心網友回復:
您可以使用Path.GetDirectoryName(sfd.FileName)獲取檔案的完整路徑
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422437.html
標籤:
