2014-10-02 8 views
0

내 진짜 목표는 DateTime.Parse에서 날짜 문자열을 Shell32 GetDetailsOf 확장 날짜 필드에서입니다. 내 디버깅을 진행하는 동안, 나는 똑같이 나타나는 문자열을 만들었고 DateTime은 그것을 파싱 할 수있었습니다. 메모리에서 2 개의 문자열을 볼 때, 그들은 다르게 보입니다.문자열이 shell32로 검색 됨 GetDetailsOf never '=='동일한 하드 코딩 된 문자열. DateTime.Parse와 구문 분석 할 수 없습니다

처음 몇 바이트 만 .....

S> 4C 2E 22 63 16 00 00 00 20 39 00 0E 2F 0E 00 20 35 00 층

Q> 4C 2E 22 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++; 
      } 
     } 
+0

두 번째 줄이 첫 줄에서 실패한 경우 올바르게 구문 분석한다는 것을 어떻게 알 수 있습니까? –

+0

공정한 질문이지만 실제로는 런타임 전에 변수를 변경하고있었습니다. 내가 질문을 올렸을 때 나는 그 줄을 복사해서 그것을 잘못된 순서로 넣었다. 나는 다른 사람들을 버리지 않기 위해 원래의 글을 업데이트 할 것이다. – ttugates

답변

2

How can I extract the date from the "Media Created" column of a video file?

어, 나는 어제 저녁부터 검색했다 대답은 여기 .. ​​

을 발견하고 내가 마지막으로 질문을 게시 할 때, 나는 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을 제거하려고 시도하여 문자를 발견했습니다. 디버깅하는 동안 어떻게 보이지 않는 문자를 발견 할 수 있었는지 말할 사람이 있습니까?