【问题标题】:Varying filepaths in C#在 C# 中改变文件路径
【发布时间】:2013-12-19 21:49:35
【问题描述】:

我正在创建从共享驱动器检索文件作为电子邮件附件的 C# Windows 窗体。我正在尝试自动化文件检索过程,但我可用的文件路径因日期而异。例如:

  • V:\....\Dec-03\filename12-3-2013.xml

  • J:\.....\December\filename12-4-2013

我将文件路径存储为文本框中的字符串,但由于路径每天都略有不同,我一直试图弄清楚如何自动化这个过程。过去,我使用 VBA 代码将方法调用连接到这样的字符串中

"..." & Day(Date) & "..."

(对于 C#,我当然用加号替换了 & 号)

但这只会让我在路径参数异常中得到一个非法字符。

我正在使用文件日期检查并通过文本框获取特定的文件路径。我想要在每月文件夹中更新的特定文件,并且文件名包含日期。我想获取具有今天日期或昨天日期的那些,但有些文件名或目录中根本没有日期。由于没有很多一致性,我很想输入代码 "+ 日期时间.Now.ToString() +" 在每个文件路径的文本框中,因为我通过表单加载它们并让程序像我使用一些 VBA 代码一样执行,但是我在文件路径中间得到带有双引号的非法字符。是否有一些解决方法或者我需要为每个特定模式创建修复?

【问题讨论】:

  • 我认为问题所在并不完全清楚。为什么你不能直接调用Directory.GetFiles(path),其中path 是包含所有子文件夹的最顶层文件夹,而这些子文件夹又包含实际文件
  • 到目前为止你尝试过什么?你有什么代码可以分享吗?如果您尝试引用当天的文件,您可以随时使用DateTimeparse
  • Day(Date) 导致非法文件路径字符?
  • 我正在使用文件日期检查并通过文本框获取特定的文件路径。我想要特定的文件,主要是具有今天日期或昨天日期的文件,但有些文件名或目录中根本没有日期。由于没有太多的一致性,我很想在每个文件路径的文本框中输入代码“+ DateTime.Now.ToString("MM/dd/yyyy") +”,因为我通过表单加载它们并拥有程序像在 VBA 中一样执行,但是在执行文件路径时,我在方法 File.GetLastWriteTime() 和我的 Emailer 中得到带有双引号的非法字符。

标签: c# date formatting filepath


【解决方案1】:

使用System.IO.Path.Combine(...) 来处理链接目录(它会为您处理额外的斜线)。在您的组合中,使用String.Format(SomeFormatString, token1value, toke2value, etc.) 为您提供您想要的名称。

C# 使用 + 来追加字符串,而不是旧版 VB 中的 &

"My Date: " + DateTime.Now.ToString("MM/dd/yyyy")

我上面展示的String.Format 的一个例子是

string.Format("My Date: {0}", DateTime.Now.ToString("MM/dd/yyyy"))

【讨论】:

  • 这我会说在你的TextBox 中取一个根文件夹路径是明智的。然后你可以使用Regex 来匹配(Dec-[\d]+|December) 在根之后的12 月。
  • 嗯,这很有帮助。我想我可以在文本框中输入与文件路径相同的任何旧日期,然后使用正则表达式查找某些模式并将其替换为最新日期。
【解决方案2】:

如果我按照你所说的关于 Day(Date) 的说法,你可以在 C# 中尝试这样的事情:

MyObject.SomeMethod("some string " + dateValue.ToString("ddd") + " more string data");

其中 dateValue 是一个 DateTime 对象,“ddd”参数告诉 ToString 方法返回一个星期几的三个字符的缩写(例如“Wed”)。

有关将 ToString 与 DateTime 对象一起使用以提取日期的各个部分的更多信息,请参阅 http://msdn.microsoft.com/en-us/library/bb762911(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

【讨论】:

    【解决方案3】:

    DateTime 结构的ToString overload 将允许您将日期格式化为月份名称等。

    var x = DateTime.Today.ToString("MMMM"); // December
    

    您也可以在格式字符串中包含其他字符,例如获取Dec-19,您可以使用:

    var x = DateTime.Today.ToString("MMM-dd"); // Dec-19
    

    TyCobb's answer 涵盖了使用Path.Combine(我通常推荐)将格式化日期组合到路径中。

    您还可以使用String.Formatformatted value 插入到字符串中,这通常更易于阅读并减少错误。例如,要生成您的第一个示例,您可以使用以下代码:

    var path =
        String.Format("V:....\{0:MMM-dd}\filename{0:M-d-yyyy}.xml", DateTime.Today);
    

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多