如何从文件名的前几个字母创建一个文件夹?

问题描述 投票:1回答:5

所以我检查了基本的东西,但我想做以下事情:

我有5个文件可以说:X1_word_date.pdf,XX1_word_date.pdf等...

我想创建一个文件夹结构,如:C:\ PATH \ X1,C:\ PATH \ XX1等...

那么如何在文件名中的'_'之前取第一个字母并将其放入字符串中?

我的想法是我使用Directory.CreateDirectory而不是组合主路径和字符串,所以我得到了文件夹。

我怎么做?帮助赞赏。

c# file directory
5个回答
3
投票

使用简单的字符串方法,如SplitSystem.IO.Path类:

var filesAndFolders = files
.Select(fn => new
{
    File = fn,
    Dir = Path.Combine(@"C:\PATH", Path.GetFileNameWithoutExtension(fn).Split('_')[0].Trim())
});

如果要创建该文件夹并添加文件:

foreach (var x in filesAndFolders)
{
    Directory.CreateDirectory(x.Dir); // will only create it if it doesn't exist yet
    string newFileName = Path.Combine(x.Dir, x.File);
    // we don't know the old path of the file so i can't show how to move
}

2
投票

或者使用正则表达式

            string mainPath = @"C:\PATH";
            string[] filenames = new string[] { "X1_word_date.pdf", "X2_word_date.pdf" };
            foreach (string filename in filenames)
            {
                Match foldernameMatch = Regex.Match(filename, "^[^_]+");
                if (foldernameMatch.Success)
                    Directory.CreateDirectory(Path.Combine(mainPath, foldernameMatch.Value));
            }

0
投票

使用从仅源和目标目录开始的更大图片。 我们可以列出我们需要使用Directory.GetFiles移动的所有文件。 在此列表中,我们首先使用GetFileName隔离文件名。 使用简单的String.Split,您将获得新的目录名称。 Directory.CreateDirectory将创建目录,除非它们已经存在。 要移动文件,我们需要它的目标路径,目标目录路径和fileName的组合。

string sourceDirectory = @"";
string destDirectory = @"";

string[] filesToMove = Directory.GetFiles(sourceDirectory); 

foreach (var filePath in filesToMove) {
    var fileName = Path.GetFileName(filePath);
    var dirPath = Path.Combine(destDirectory, fileName.Split('_')[0]);
    var fileNewPath= Path.Combine(dirPath,fileName);
    Directory.CreateDirectory(dirPath);// If it exist it does nothing.
    File.Move(filePath, fileNewPath);
}
© www.soinside.com 2019 - 2024. All rights reserved.