【问题标题】:moving file from one location to another without knowing file name在不知道文件名的情况下将文件从一个位置移动到另一个位置
【发布时间】:2017-06-08 22:14:36
【问题描述】:

我的一个可执行进程生成两个文件。我想将生成的一个文件移动到共享驱动器。我正在编写一个自动过程来将文件从一个位置移动到共享驱动器。唯一的问题是每次运行可执行文件时都会更改文件名,因此我没有确切的文件名。我只有扩展名 .xls。我的目录中只有一个 .xls 文件。

我试过这样做

File.Copy(@"*.xls", @"\\serv44\Application\testing\name\test2\*.xls", true);

它抛出了一个错误,提示名称无效。将文件移动到共享驱动器后。我想删除 .xls 文件。

File.Delete("*.xls");

任何帮助将不胜感激

【问题讨论】:

  • 使用 Directory.GetFiles 查询文件

标签: c# file


【解决方案1】:

你应该得到文件名,然后对那个文件做任何你想做的事情。 IE。如果源目录中只有一个 xls 文件:

var targetDirectory = @"\\serv44\Application\testing\name\test2\";
var sourceFile = Directory.EnumerateFiles(sourceDirectory, "*.xls").FirstOrDefault();
if (sourceFile != null)
{
    var sourceFileName = Path.GetFileName(sourceFile);
    var targetFileName = Path.Combine(targetDirectory, sourceFileName);
    File.Copy(sourceFileName, targetFileName);
    File.Delete(sourceFileName);
}

注意:您可以使用单个Move 操作来代替复制和删除。

如果你想从你的源目录中移动几个文件,那么不要在一个循环中处理所有找到的文件:

 foreach(var sourceFile in Directory.EnumerateFiles(sourceDirectory, "*.xls"))
 {
     var sourceFileName = Path.GetFileName(sourceFile);
     var targetFileName = Path.Combine(targetDirectory, sourceFileName);
     File.Move(sourceFileName, targetFileName);
 }

【讨论】:

    【解决方案2】:

    这应该给你那个文件名:

    var fileName = Directory.GetFiles(yourDirectory, "*.xls").ToList().FirstOrDefault();
    

    【讨论】:

    • GetFiles 方法返回一个数组。然后你把它转换成一个列表——为什么?最后只取第一个值。其他所有东西都进了垃圾桶。假设该文件夹包含数百万个文件。
    • 正如 Anjali 所说,目录中只有一个 xls 文件,那么为什么要想象数百万个文件呢?我只将一个项目数组转换为列表,以便能够使用 FirstOrDefault() 方法,我认为这在这里很有用。
    • 我可以直接返回零位项目,但我想放一个空数组检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多