0

私の本当の目的は、Shell32 GetDetailsOf Extended 日付フィールドから日付文字列を DateTime.Parse することです。デバッグを進めながら、同じように見える文字列を作成しただけで、DateTime はそれを解析できます。メモリ内の 2 つの文字列を表示すると、異なって表示されます。

最初の数バイトだけ.....

s > 4c 22 2e 63 16 00 00 00 0e 20 39 00 2f 00 0e 20 35 00 2f

q > 4c 22 2e 63 11 00 00 00 39 00 2f 00 35 00 2f 00 32 00 30

DateTime.Parse で解析できるように文字列をフォーマットする方法はありますか?

        Shell32.Shell shell = new Shell32.Shell();
        Shell32.Folder objFolder;
        objFolder = shell.NameSpace(folder);
        int i = 0;
        foreach (Shell32.FolderItem2 item in objFolder.Items())
        {
            if (item.Type == "Windows Recorded TV Show")
            {
                mediaArray[i, 0] = objFolder.GetDetailsOf(item, 21);   // serName
                mediaArray[i, 1] = objFolder.GetDetailsOf(item, 254);  // epName
                mediaArray[i, 2] = objFolder.GetDetailsOf(item, 259);  // desc
                mediaArray[i, 3] = objFolder.GetDetailsOf(item, 258);  // broad Date


                DateTime dateValue;
                CultureInfo culture;
                DateTimeStyles styles;
                styles = DateTimeStyles.AssumeLocal;
                culture = CultureInfo.CreateSpecificCulture("en-US");
                string s = mediaArray[i, 3].Normalize();  //  Guessing this string isn't ASCII?                                         
                string q = "9/5/2014 12:00 AM";           
                if (s == q) { MessageBox.Show("They are the same."); } // Never Entered. ):
                MessageBox.Show(s+"\n"+q); //  They appear exactly the same!

                dateValue = DateTime.Parse(q, culture, styles); // parses correctly
                dateValue = DateTime.Parse(s, culture, styles); // fails at runtime


                i++;
            }
        }
4

1 に答える 1

2

ビデオ ファイルの [メディア作成] 列から日付を抽出するにはどうすればよいですか?

ええと、私はここで答えを見つけました..

昨日の夕方からずっと探していたのですが、やっと質問を投稿してみると、30分以内に答えが見つかりました。

どうやら (char)8206 (char)8207 という文字が GetDetailsOf の文字列 s に存在するようです。これらの文字は、 MessageBox.Show() すると非表示になりますが、削除しても問題は解決しませんでした。

 // These are the characters that are not allowing me to parse into a DateTime
 char[] charactersToRemove = new char[] 
 {
  (char)8206,
  (char)8207
 };

  // Removing the suspect characters
  foreach (char c in charactersToRemove)
  value = value.Replace((c).ToString(), "").Trim();

== と String.Equals の違いは認識しています。しかし、問題をデバッグするために == を具体的に使用していました。

別の投稿の助けを借りてそれらを削除しようとして、文字8206と8207を見つけました。デバッグ中にこれらの目に見えない文字をどのように見つけたのか、誰か言いたいですか?

于 2014-10-02T16:20:28.627 に答える