2015-07-21 90 views
0

我在這裏的是用戶從外部驅動器中選擇一個文件夾完整的.txt文件和一個虛擬文件與文件名到本地文件夾。如何確保用戶選擇特定文件夾並從選定文件夾中的文件中刪除文件擴展名?

我有兩個問題關於下面的代碼。

  1. 如何驗證用戶是否選擇了特定的文件夾?
  2. 如何刪除.txt擴展名?代碼複製文件名並創建文件,但其標籤爲「text.txt.png」,但我需要它讀取「text.png」。

    int g; 
    
        private void folderSelect() 
        { 
         FolderBrowserDialog folder = new FolderBrowserDialog(); 
         folder.RootFolder = Environment.SpecialFolder.MyComputer; 
         folder.ShowNewFolderButton = false; 
         folder.Description = "Select Folder"; 
    
         if (folder.ShowDialog() == DialogResult.OK) 
         { 
          DirectoryInfo files = new DirectoryInfo(folder.SelectedPath); 
          FileInfo[] textFiles = files.GetFiles("*.txt"); 
    
          while (g < textFiles.Length) 
          { 
    
           if (g <= textFiles.Length) 
           { 
            File.Create("path/" + (textFiles[g].Name + ".png")); 
            g++; 
           } 
           else 
           { 
            break; 
           } 
          } 
    
         } 
    

注:我嘗試使用Path.GetFileNameWithoutExtension如果我正確地使用它來刪除擴展,但林不知道。

任何幫助,將不勝感激。先謝謝你。

回答

2
const string NEW_PATH = "path/"; 
if (!Directory.Exists(NEW_PATH)) 
    Directory.CreateDirectory(NEW_PATH); 
const string PATH_TO_CHECK = "correctpath"; 

FolderBrowserDialog folder = new FolderBrowserDialog(); 
folder.RootFolder = Environment.SpecialFolder.MyComputer; 
folder.ShowNewFolderButton = false; 
folder.Description = "Select Folder"; 

if (folder.ShowDialog() == DialogResult.OK) 
{ 
    string pathPastDrive = folder.SelectedPath.Substring(Path.GetPathRoot(folder.SelectedPath).Length).ToLower(); 
    // Here it depends on whether you want to check (1) that the path is EXACTLY what you want, 
    // or (2) whether the selected path just needs to END in the path that you want. 
    /*1*/ if (!pathPastDrive == PATH_TO_CHECK) 
    /*2*/ if (!pathPastDrive.EndsWith(PATH_TO_CHECK)) 
     return; // or you can throw an exception if you want 

    foreach (string textFile in Directory.GetFiles(folder.SelectedPath, "*.txt")) 
     File.Create(NEW_PATH + Path.GetFileNameWithoutExtension(textFile) + ".png"); 
} 

您可以使用GetFileNameWithoutExtension,它使它很容易。

此外,如果您已確定您的新文件夾存在,則可以省略前三行,並在最後一行替換NEW_PATH"path/"

+0

謝謝你的時間,但這沒有爲我工作。 –

+1

@Bigg_aye怎麼這樣?我想知道這樣我可以解決我的答案。 (尤其是因爲它爲我工作。) – Jashaszun

+0

由於某種原因,它從未在現有文件夾中創建虛擬文件。該文件夾是一個現有的文件夾,所以我知道路徑名,所以我刪除了前三行,並按照您的建議在最後一行替換爲「path /」的NEW_PATH。 –

2

要查看返回的路徑只需使用SelectedPath屬性,那麼您可以將其與您想到的任何內容進行比較。路徑前的@僅意味着我不必轉義任何字符,它與"C:\\MyPath"相同。

FolderBrowserDialog folder = new FolderBrowserDialog(); 
if (folder.ShowDialog() == DialogResult.OK) 
{ 
    if (folder.SelectedPath == @"C:\MyPath") 
    { 
     // DO SOMETHING 
    } 
} 

你已經擊中頭部繞不帶擴展名的文件名指甲,改變這一行:

File.Create("path/" + (textFiles[g].Name + ".png")); 

要這樣:

File.Create("path/" + (Path.GetFileNameWithoutExtension(textFiles[g].Name) + ".png")); 

編輯:

要獲取已有DirectoryInfo對象的文件夾名稱,只需使用該名稱即可:

DirectoryInfo files = new DirectoryInfo(folder.SelectedPath); 
string folderName = files.Name; 
+0

我很感激。你回答了我的第二個問題,但第一個問題是關於外部驅動器,所以當用戶插入USB驅動器時,我無法預測驅動器將映射到USB驅動器。有沒有一種方法來驗證文件夾名稱,因爲無論usb映射到哪個驅動器,它都必須始終是相同的文件夾名稱? –

+0

如果我對你有所瞭解,你可以從你已有的DirectoryInfo對象中獲取文件夾名稱。更新了答案。 – Equalsk

相關問題