投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/26 14:24:40
> Dim fileDate As String
> fileDate = FileDateTime("D:\a.txt")

まずココがおかしいです。
戻り値は 日付型なのですから、このように書くべきですね。
Dim fileDate As Date = FileDateTime("D:\a.txt")


データ型の指定ミスを防ぐためにも、ファイルの先頭に「Option Strict On」を入れておくことをお奨めします。

> Dim Now As DateTime = DateTime.Now
VB の場合、単独で「Now」だけで現在日時を得られます。
 = DateTime.Now
 = Date.Now
 = DateAndTime.Now
 = Now
は、いずれも同じ結果を返します。

そのため、変数名も同じ「Now」にしてしまうと分かりにくくなってしまいます。

あえてそうしているのかもしれませんが、後でプログラムを見た時に、
変数に格納した特定の時刻なのか、その時点の最新日時なのか混乱するので、
個人的には別の変数名にしておくことをお奨めします。
(とはいえ今回は、そのまま「Now という変数」ということにしておきます)


> 作成時刻と現在時刻を比較(減算)し、結果が0ある、0でないという分岐をしたいんですが、
それなら単に 『If fileDate <> Now Then』 で良いと思いますよ。

ちなみに
 Dim Span As TimeSpan = Now.Subtract(fileDate)
は、
 Dim Span As TimeSpan = Now - fileDate
と書けます。


> If  Span <> 0 Then  ←ここでエラーが出るので
「If Span <> Nothing Then」もしくは「If Span <> TimeSpan.Zero Then」ですね。

あるいは、「If Span.Ticks = 0L Then」や「If Span.TotalMilliseconds = 0.0R Then」のように
TimeSpan のプロパティ経由で比較する方法もあります。プロパティで比較すると、たとえば

' 3 秒以内の違いは、同じものとしてみなす
If Math.Abs(Span.TotalSeconds) < 3.0R Then

のような判定も可能になります。