将基于名称的文件移动到相应的文件夹

时间:2012-02-01 14:55:27

标签: c#

大家好,很满意!我尝试了很多不同的方法/程序来尝试解决我的问题。我是一名新手程序员并且已经学习了Visual Basic类和Visual C#类。

我正在C#

中使用它

我开始制作一个非常基本的移动文件程序,它适用于一个文件,但正如我所提到的,我将需要根据名称移动大量文件

我要做的是将基于用户名的交换服务器上的.pst(例如dave.pst)文件移到用户文件夹(folder = dave)中与.pst同名的备份服务器上文件

理想的计划是: 从扩展名为.pst的文件夹中获取文件 将文件移动到.pst文件扩展名前面具有相同名称的相应文件夹

更新

// String pstFileFolder = @"C:\test\";
// var searchPattern = "*.pst";
// var extension = ".pst";
//var serverFolder = @"C:\test3\";
// String filename = System.IO.Path.GetFileNameWithoutExtension(pstFileFolder);
// Searches the directory for *.pst

DirectoryInfo sourceDirectory = new DirectoryInfo(@"C:\test\");
String strTargetDirectory = (@"C:\test3\");
Console.WriteLine(sourceDirectory);
Console.ReadKey(true);>foreach (FileInfo file in sourceDirectory.GetFiles()) {
    Console.WriteLine(file);
    Console.ReadKey(true);

    // Try to create the directory.
    System.IO.Directory.CreateDirectory(strTargetDirectory);
    file.MoveTo(strTargetDirectory + "\\" + file.Name);
}

这只是一个简单的复制程序。我完全清楚了。

  

Console.WriteLine(文件);   Console.ReadKey(真);

目前是为了验证目的,以确保我得到正确的文件,我。现在我只需要找到基于.pst文件名称的文件夹(用户的文件夹已经创建),创建一个文件夹(比如说年份为0304),然后根据名称复制.pst。 / p>

非常感谢你的帮助。 @yuck,谢谢代码。

4 个答案:

答案 0 :(得分:3)

查看File命名空间中的DirectorySystem.IO类。您可以使用Directory.GetFiles()方法获取需要传输的文件的名称。

答案 1 :(得分:1)

这是一个让您入门的控制台应用程序。请注意,没有任何错误检查,它会对文件的命名方式做出一些假设(例如,它们以.pst结尾,并且不包含名称中的其他位置):

private static void Main() {
    var pstFileFolder = @"C:\TEMP\PST_Files\";
    var searchPattern = "*.pst";
    var extension = ".pst";
    var serverFolder = @"\\SERVER\PST_Backup\";

    // Searches the directory for *.pst
    foreach (var file in Directory.GetFiles(pstFileFolder, searchPattern)) {
        // Exposes file information like Name
        var theFileInfo = new FileInfo(file);
        // Gets the user name based on file name
        // e.g. DaveSmith.pst would become DaveSmith
        var userName = theFileInfo.Name.Replace(extension, "");
        // Sets up the destination location
        // e.g. \\SERVER\PST_Backup\DaveSmith\DaveSmith.pst
        var destination = serverFolder + userName + @"\" + theFileInfo.Name;

        File.Move(file, destination);
    }
}

答案 2 :(得分:0)

我个人更喜欢DirectoryInfo因为它更面向对象。

DirectoryInfo sourceDirectory = new DirectoryInfo("C:\MySourceDirectoryPath");
String strTargetDirectory = "C:\MyTargetDirectoryPath";

foreach (FileInfo file in sourceDirectory.GetFiles())
{
    file.MoveTo(strTargetDirectory + "\\" + file.Name);
}

答案 3 :(得分:0)

在这种情况下,

System.IO是你的朋友;)

首先,通过以下方式确定文件名:

String filename = System.IO.Path.GetFileNameWithoutExtension(SOME_PATH)

要创建新文件夹的路径,请使用Path.Combine

String targetDir = Path.Combine(SOME_ROOT_DIR,filename);

接下来,创建名称基于给定fileName

的文件夹
System.IO.Directory.CreateDirectory(targetDir);

啊!你需要有文件名,但这次有扩展名。 Path.GetFileName

String fileNameWithExtension = System.IO.Path.GetFileName(SOME_PATH);

您可以将文件(File.Move)移动到它:

System.IO.File.Move(SOME_PATH,Path.Combine(targetDir,fileNameWithExtension)

Laster已经向您展示了如何在文件夹中获取文件列表。