【发布时间】:2017-07-12 10:11:00
【问题描述】:
我正在为我们的客户服务部门开发一款应用。用户将输入打印编号和制造日期。然后,该应用程序将执行获取文件,返回使用该图号(多个修订版)找到的所有文件的结果。这些文件以这种格式命名drawingnumber_rev_pages_6-digit date.pdf。
一旦我得到了该图纸编号的列表,然后我取一个 10 个字符的右(字符串)来去除 6 位数的日期,并执行 Date.ParseExact 以与用户输入的制造日期进行比较。我在那个日期之前抓取了任何东西,并将它们显示在一个列表框中。标准现在已经改变,他们希望我只显示与该构建日期相关的文件。问题是,我需要该日期之前的第一个版本。而且我不完全理解我的 getfiles 语句的 (function) 部分。所以我不知道要搜索什么来查找谷歌结果。当我搜索getfiles时,没有提到函数,如果我查找orderby ...函数没有提到,我需要在linq下搜索吗?你会建议我如何处理这个?
original version example
新版本,我可以过滤结果并找到日期之前的所有内容......但我想要的是制造之前的最高版本。日期。返回单个结果。
current version
谢谢大家-这是我的示例代码。
Try
Dim results = Directory.GetFiles(fp, f).
OrderByDescending(Function(x) New FileInfo(x).FullName)
For Each result In results
Dim dp As String = ""
Dim d As Date
dp = Strings.Right(result, 10)
dp = Strings.Left(dp, 6)
d = Date.ParseExact(dp, "MMddyy", New Globalization.CultureInfo("en-us"))
Debug.Print(dp)
Debug.Print(d)
Dim udt As String = ""
Dim ud As Date 'user date
udt = Trim(Replace(txtMfgDate.Text, "/", ""))
If udt.ToString.Length = 0 Then lstFound.Items.Add(result)
ud = Date.ParseExact(udt, "MMddyy", New Globalization.CultureInfo("en-us"))
If d.Date <= ud.Date Then
lstFound.Items.Add(result)
End If
Debug.Print(d)
Debug.Print(ud)
If result <> Nothing Then
End If
Next
Catch x As Exception
MessageBox.Show("Error finding file: " & f)
End Try
【问题讨论】:
-
OrderByDescending没有意义,因为您可以直接使用文件路径,所以:Directory.GetFiles(fp, f).OrderByDescending(Function(path) path)。如果不能使用 LINQ,则需要 .NET 3.5、Vuisual Studio 2008 和Imports System.Linq。 -
我正在使用 .net 4.5.2 并使用 Visual Studio 2015 编写代码。我是自学的,并使用语句的函数部分找到了 getfiles 示例 - 我曾经使用它获取最后修改日期,但这并不反映实际的修改日期 - 所以我不得不修改它。我提到了 linQ,因为我不确定函数部分是否是 linq 语句。我无法在我的代码中找到有关 getfiles 行那部分的文档 - 我不完全理解它是如何工作的。
-
orderby 在那里我在其他代码区域中使用它,在那里我找到了第一个获取最新版本的实例。生产和账单编写者也使用这个应用程序。我的复制/粘贴习惯不好。
-
错误信息到底是什么?还显示堆栈跟踪(其中提到了行号和方法)。
-
没有错误。让我改述一下。我正在寻找这样的文件。用户输入绘图号 0.071.911 当前应用程序返回所有修订。 0071911_a_1_072115.pdf、0071911_b_1_091115.pdf等客服有保修或电话,他们想输入日期作为搜索条件的一部分。客户单位制造日期为 2015 年 7 月 1 日。然后我想找到并只显示版本 A,因为版本 b 是在客户版本之后制作的。如果日期是 2017 年 6 月 1 日 - 在这种情况下它将返回 rev F,而不是 rev a thru F...我的第一次尝试我只返回日期之前的那些,但他们想要 1 个文件。