我正在嘗試為具有此特定功能的檔案創建一個復制按鈕:
當我在文本框中寫入例如“KL5050”然后按復制按鈕時,我想從特定檔案夾復制檔案 KL5050 并將其粘貼到另一個特定檔案夾,而無需詢問或打開任何對話框或視窗,只需單擊、復制和粘貼。
檔案格式無關緊要,可以是 TXT、doc、PDF、JPEG 等,只要將文本框中的文本與檔案夾中的任何現有檔案匹配,它將被復制到另一個檔案夾。
此外,如果復制檔案夾中不存在該檔案,則會收到警告“找不到檔案”。
到目前為止,我擁有的代碼有兩個文本框,第一個稱為 serieBox,在繼續下一個框之前只需要輸入資料(如果為空則打開一個視窗),然后下一個框命名為 recetaBox,這是一個我輸入檔案名,然后單擊按鈕,程式將查找檔案并將其復制到不同的檔案夾。到目前為止,我不知道將第二個盒子 recetaBox 放在哪里。還沒有在代碼中。
private void cargarButton_Click(object sender, EventArgs e)
{
if (serieBox.Text == string.Empty)
{
SerieWin openForm = new SerieWin();
openForm.ShowDialog();
}
else
{
try
{
string dircopyFrom = @"C:\From\";
string dircopyTo = @"C:\To\";
string[] files = Directory.GetFiles(dircopyFrom);
foreach (string file1 in files)
{
string filename1 = Path.GetFileName(file1);
File.Copy(file1, dircopyTo "\\", true);
}
}
catch (Exception ex)
{
}
uj5u.com熱心網友回復:
您唯一不完全清楚的是 KL5050 是檔案名的開始、結束、全部還是部分,但它很容易修復
string[] files = Directory.GetFiles(dircopyFrom);
foreach (string file in files)
{
var fn = Path.GetFileNameWithoutExtension(file);
if(!fn.Contains(recetaTextBox.Text, StringComparison.OrdinalIgnoreCase))
continue;
fn = Path.GetFileName(file);
File.Copy(file, Path.Combine(dircopyTo, fn), true);
}
} catch(Exception ex){
MessageBox.Show(ex.Message);
}
帶走要點:
做一些檢查,比如包含、開始、結束等
使用 Path.Combine 構建路徑;.net 不僅僅在 Windows 上運行,而且不同的系統有不同的目錄分隔符
File.Copy 采用一個必須包含 FileName 的目標路徑,而不僅僅是一個目錄。可以通過調整名稱在復制程序中重命名目標檔案
永遠不要放一個空的 catch 塊。至少總是做一個
MessageBox.Show(ex.Message);特別處理檔案的作業。當一個按鈕被點擊時什么都不做的程式是非常令人沮喪的。如果至少在嘗試復制時收到“另一個程式正在使用檔案”,那么您可以對此做點什么..很難追蹤任何問題如果您想要稍微提高效率,您可以使用 的內容
recetaTextBox.Text來形成 GetFiles 的過濾器,例如GetFiles(dircopyFrom, recetaTextBox.Text "*.*")- 這在概念上等同于“StartsWith”。您可以在精美的手冊中閱讀有關采用搜索模式的 getfiles 的更多資訊- 模式匹配是非常基本的,但如果您想要任何高級內容,例如 Regex,甚至只是區分大小寫,則需要在您自己的代碼中進行您要復制到的目錄必須存在。我沒有在代碼中添加任何內容來確保這一點,但請注意,
Directory.CreateDirectory(dirCopyTo)即使它已經存在,呼叫也是安全的,因此,如果該目錄可能不存在,您始終可以在呼叫 copy 之前呼叫 CreateDirectory 以確保它做
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335851.html
