- 締切済み
ReadDirectoryChangesWで取得した変更ファイル名について
質問させて頂きます。 現在、非同期で指定したディレクトリを監視するプログラムを組んで降りますが 監視しているディレクトリ内のファイルが削除/変更された場合に 通知されたファイル名の終端に結構な頻度で余計な文字が混ざっています 例えば"test.txt"というファイル名が通知されるはずが"test.txt↑"といったファイル名になります その為、unicodeからANSIに文字列を変換する際、余計な文字まで変換され 現在困っています ReadDirectoryChangesWを呼ぶ前に、バッファはきちんとZeroMemoryしております。 処理しているコードの一部です ZeroMemory( szBuffer, sizeof(szBuffer) ); ReadDirectoryChangesW( hDirectory, szBuffer, sizeof(szBuffer), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME, &dwResult, &ol, NULL ); /* ここに待機処理が入り、下記は変更通知を受けた場合の処理です */ iIndex = 0; GetOverlappedResult( hDirectory, &ol, &dwResult, TRUE ); for( ; ; ) { pNotify = (FILE_NOTIFY_INFORMATION *)&szBuffer[iIndex]; if( !pNotifi->NextEntryOffset ) { iIndex += pNotifyInfo->NextEntryOffset; } else { break; } } 上記コードが現在のコードを一部記載した物です。 何故、余計な文字が混入されるのでしょうか? ご教授の程、よろしくお願いします。
お礼
有難うございます。 >is not null-terminated 通知されたファイル名に終端は入らないのですね… すぐにunicodeからANSIに変換する処理を行っておりましたので pNotifi->FileName[ pNotifi->FileNameLength >> 1 ] = '\0'; とすることで、無事解決しました。 本当に有難うございました。