我正在開發使用C#與一個OpenFileDialog和FileBrowserDialog一個WinForms應用程序,我想:C#Windows窗體 - 選擇並複製多個文件有多重選擇,打開文件對話框,與FileBrowserDialog
- 啓用多重選擇xls文件。
- 選擇後作出,
- 複製選定的文件顯示所選的xlsx文件名的文本框合併一個單獨的目錄
我怎樣才能做到這一點?
我正在開發使用C#與一個OpenFileDialog和FileBrowserDialog一個WinForms應用程序,我想:C#Windows窗體 - 選擇並複製多個文件有多重選擇,打開文件對話框,與FileBrowserDialog
我怎樣才能做到這一點?
下面是示例代碼:
OpenFileDialog od = new OpenFileDialog();
od.Filter = "XLS files|*.xls";
od.Multiselect = true;
if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string tempFolder = System.IO.Path.GetTempPath();
foreach (string fileName in od.FileNames)
{
System.IO.File.Copy(fileName, tempFolder + @"\" + System.IO.Path.GetFileName(fileName));
}
}
有OpenFileDialog
的MultiSelect
屬性,您需要將其設置爲true
以允許選擇多個文件。
從MSDN Here is a code example,其允許用戶選擇圖像的倍數數目,並顯示它們在圖片框窗體上的控件:
private void Form1_Load(object sender, EventArgs e)
{
InitializeOpenFileDialog();
}
private void InitializeOpenFileDialog()
{
// Set the file dialog to filter for graphics files.
this.openFileDialog1.Filter =
"Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" +
"All files (*.*)|*.*";
// Allow the user to select multiple images.
this.openFileDialog1.Multiselect = true;
this.openFileDialog1.Title = "My Image Browser";
}
private void selectFilesButton_Click(object sender, EventArgs e)
{
DialogResult dr = this.openFileDialog1.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
// Read the files
foreach (String file in openFileDialog1.FileNames)
{
// Create a PictureBox.
try
{
PictureBox pb = new PictureBox();
Image loadedImage = Image.FromFile(file);
pb.Height = loadedImage.Height;
pb.Width = loadedImage.Width;
pb.Image = loadedImage;
flowLayoutPanel1.Controls.Add(pb);
}
catch (SecurityException ex)
{
// The user lacks appropriate permissions to read files, discover paths, etc.
MessageBox.Show("Security error. Please contact your administrator for details.\n\n" +
"Error message: " + ex.Message + "\n\n" +
"Details (send to Support):\n\n" + ex.StackTrace
);
}
catch (Exception ex)
{
// Could not load the image - probably related to Windows file system permissions.
MessageBox.Show("Cannot display the image: " + file.Substring(file.LastIndexOf('\\'))
+ ". You may not have permission to read the file, or " +
"it may be corrupt.\n\nReported error: " + ex.Message);
}
}
}
感謝您的迴應!該代碼示例允許用戶選擇多個圖像並將其顯示在Form的PictureBox控件中。如何將選定的xls文件複製到Consolidated文件夾並通過命令提示符命令[C:\ CommissionRecon \ ConvertExcel \ ConvertExcelTo.exe^xxxxx.xls^xxxx.csv] – 2011-03-17 12:58:10
轉換爲.csv文件就像這樣工作:foreach(字符串fileName在od.FileNames){System.IO.File.Copy(文件名,consolidatedFolder + @「\」+ System.IO.Path.GetFileName(fileName)); } – 2011-03-17 13:39:20
+1感謝您的幫助。使用if/else組合和try/catch組合有什麼區別?我把你的答案結合起來提出我的答案。請檢查我的答案,看看它是否看起來不錯。 – 2011-03-24 13:42:53
結合兩個答案,這是我想出的代碼:
複製所選文件到一個單獨的綜合目錄(使用foreach循環,System.IO.File.Copy,System.IO.Path.GetFileName,sourceFileOpenFileDialog.FileName)
private void sourceFiles_Click(object sender, EventArgs e)
{
Stream myStream;
OpenFileDialog sourceFileOpenFileDialog = new OpenFileDialog();
this.sourceFileOpenFileDialog.InitialDirectory = "i:\\CommissisionReconciliation\\Review\\";
this.sourceFileOpenFileDialog.Filter = "Excel Files (*.xls;*.xlsx;)|*.xls;*.xlsx;|All Files (*.*)|*.*";
this.sourceFileOpenFileDialog.FilterIndex = 2;
this.sourceFileOpenFileDialog.RestoreDirectory = true;
this.sourceFileOpenFileDialog.Multiselect = true;
this.sourceFileOpenFileDialog.Title = "Please Select Excel Source File(s) for Consolidation";
if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = sourceFileOpenFileDialog.OpenFile()) != null)
{
using (myStream)
{
// populates text box with selected filenames
textBoxSourceFiles.Text = sourceFileOpenFileDialog.FileNames;
}
} // ends if
} // ends try
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
} // ends if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
} // ends public void sourceFiles_Click
private void consolidateButton_Execute_Click(object sender, EventArgs e)
{
string consolidatedFolder = targetFolderBrowserDialog.SelectedPath;
foreach (String file in sourceFileOpenFileDialog.FileNames)
{
try
{
// Copy each selected xlsx files into the specified TargetFolder
System.IO.File.Copy(sourceFileOpenFileDialog.FileName, consolidatedFolder + @"\" + System.IO.Path.GetFileName(sourceFileOpenFileDialog.FileName));
Log("File" + sourceFileOpenFileDialog.FileName + " has been copied to " + consolidatedFolder + @"\" + System.IO.Path.GetFileName(sourceFileOpenFileDialog.FileName));
}
} // ends foreach loop
} // ends void consolidateButton_Execute_Click
你想要文件只在鞏固按鈕不被點擊時複製因此file.copy操作必須在consolidationateButton_Execute_Click方法下移動:) – 2011-03-24 13:58:20
@AntonSemenov,謝謝你的迴應!這不會在Web應用程序和勝利表單應用程序中使用嗎?這裏沒有方法或selectFilesButton_Click方法。 – 2011-03-17 13:02:29
@AntonSemenov,這個代碼很好,但並沒有給我一個完整的圖片。這段代碼在哪裏進入應用程序?在private void selectFilesButton_Click方法下?我需要編輯其他方法嗎? – 2011-03-18 13:15:36
好的。創建新的Windows窗體應用程序項目並將按鈕放在窗體上。雙擊按鈕後,IDE將創建按鈕單擊事件處理程序。只需將我的答案中的代碼放到按鈕單擊事件處理程序中並運行項目 – 2011-03-18 16:52:14