如何确保用户选择特定文件夹并从所选文件夹中的文件中删除文件扩展名?

时间:2015-07-21 16:34:29

标签: c# winforms

我在这里的是用户从外部驱动器中选择一个包含.txt文件的文件夹,并使用文件名将虚拟文件写入本地文件夹。

我对以下代码有2个问题。

  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;
                    }
                }
    
            }
    
  3. 注意:我尝试使用Path.GetFileNameWithoutExtension删除扩展程序,但我不确定我是否正确使用它。

    任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分: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/"

答案 1 :(得分: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;