IE6と7以降でIEキャッシュの命名規則が違う

http://127.0.0.1/ のようなURLにキャッシュ可能な文書を置いてアクセスし、Temporary Internet Files に生成されるファイル名を確認すると、

  • IE6 では、 127.0.0.1[1].txt となる
  • IE7/8 では、 127_0_0_1[1].txt となる

なんて微妙な仕様変更。

SDカードから失われた動画を復旧する

ffmpeg で -i オプションにワイルドカードを使ったらSDカード内のAVIがごっそり0バイトになって焦った。

ここは本気を出さねばならない。

selfImageで、メディアまるごとのバイナリイメージを取って、以下のコードを実行し、「"RIFF"から始まるファイル」に分割。なんせ元のファイルサイズが失われてるのでほんとはきちんとRIFFフォーマットを解析しなきゃならないのだが、面倒なので。
あとは、出来上がった「後ろにおまけのついた動画ファイル」を無理やり動画コンバータに放り込んで変換成功。

ふぅ、冷汗かいた。

int _tmain(int argc, _TCHAR* argv[])
{
	char buf[BUF_SIZE];

	FILE* fp;
	::fopen_s(&fp, "sd_card.img", "rb");
	FILE* fOut=NULL;
	int count=0;
	while(!::feof(fp)){
		::fread(buf, 1, BUF_SIZE, fp);
		if(fOut)::fwrite(buf, 1, BUF_SIZE,fOut);

		long cur=0;
		while(cur<BUF_SIZE){
			const char* pos=(const char*)::memchr(buf+cur, 'R', BUF_SIZE-cur);
			if(!pos){
				break;
			}
			if(::memcmp(pos, "RIFF", 4)==0){
				if(fOut)::fclose(fOut);
				char fname[20];
				::sprintf(fname, "%d.avi", count);
				fOut=::fopen(fname, "wb");
				::fwrite(pos, 1, BUF_SIZE-(pos-buf), fOut);
				count++;
			}
			cur=pos-buf+1;
		}
	}
	if(fOut)::fclose(fOut);
	::fclose(fp);
	
	return 0;
}

PathMatchSpecの挙動

Windows上でワイルドカードを処理するAPIがPathMatchSpecである。
http://msdn.microsoft.com/en-us/library/bb773727(VS.85).aspx
しかしここに載っているサンプルがあまりにもセンスが悪い。

ということでテストコードを書いた。コードは後述。結果は以下。

"somepath.html" , "somepath?html" => true
"somepath.html" , "" => true
"somepath.html" , "(null)" => false
"" , "*" => true
"" , "a" => false
"somepath" , "*." => false
"somepath" , "*.*" => true
"hoge\fuga.html" , "hoge*" => true
"hoge\fuga.html" , "hoge*html" => true
"hoge\fuga.html" , "hoge\*" => true

コードはこんな。

続きを読む