デスクトップ整理

http://blog.2310.net/archives/462に触発されて、デスクトップに置きっぱなしのファイルを日付ごとの時系列に片づけることにした。オリジナルはゴミ箱に捨てるのだけど、それだと困るので少しだけ改造した。

まず、指定したパスにファイルを移動させる関数を書いた。よく考えると、MS Windows用にコードを書くのはすごく久しぶりだ(8年ぶり?)。

int move_to_folder_multifles(LPCTSTR files, LPCTSTR folder_path, BOOL confirmation)
{
  SHFILEOPSTRUCT sh_file_operation_struct;
  FILEOP_FLAGS   flags = FOF_ALLOWUNDO|FOF_RENAMEONCOLLISION;
  int result = 1;
  TCHAR *file_to = (TCHAR *)malloc(lstrlen(folder_path) + 2);
  if(!confirmation) flags |= FOF_NOCONFIRMATION;

  lstrcpyn(file_to, folder_path, lstrlen(folder_path) + 1);
  file_to[lstrlen(folder_path) + 1] = '\0';

  ZeroMemory( &sh_file_operation_struct, sizeof(sh_file_operation_struct) );
  sh_file_operation_struct.wFunc  = FO_MOVE;
  sh_file_operation_struct.fFlags = flags;
  sh_file_operation_struct.pFrom  = files;
  sh_file_operation_struct.pTo    = file_to;

  result = SHFileOperation(&sh_file_operation_struct);
  free(file_to);
  return result;
}

実は、移動先のディレクトリパスをLPCTSTRからTCHARへの変換しているのですが、これは間違っているはずです。調べたのですが簡単に変換できそうにないので、そのままにしています。

  lstrcpyn(file_to, folder_path, lstrlen(folder_path) + 1);

これを、clear_desktop_files.cから

  get_folder_personal(folder_path); //My Document
  lstrcat(folder_path, "\\z整頓");
  move_to_folder_multifles(files, (LPCTSTR)&folder_path, TRUE);

と呼び出して、My Documentの下に移動させています。