プログラマーズマガジン Windowsでのファイル操作2



 WindowsではGetFullPathName()関数で指定したパスを絶対形式のフルパスに変換する 事ができます。
#include <windows.h>
#include <stdio.h>

main(int argc, char *argv[])
{
	unsigned char
		buff[1000];
	LPSTR	fname;

	if(argc <= 1)
		return;
	GetFullPathName(argv[1], 1000, buff, &fname);
	printf("%s,%s,%s\n", argv[1], buff, fname);
}
このプログラムを何かパス名を指定して実行するとそのフルパス名が表示されます。 たとえば次のような実行結果が得られます。
DOSwindow>test .\test.c
.\test.c,C:\SOURCE\pmaga\test.c,test.c
最後の項目はファイル名だけではなくディレクトリ名も返してくるので余り有用では ありません。これでフルパス名の取得は問題ないのですが、この方法で得たフルパス名を そのまま画面に表示するには問題があります。この方法でえられたフルパス名の 大小文字の区別が実際とは異なる場合があります。問題となるのはGetFullPathName()の 最初のパラメータに指定した部分です。ここにディレクトリ名などを指定すると、それと 同じ大小文字として結果が返ってきてしまいます。たとえば次のようになります。
DOSwindow>test ..\PMAGA\TEST.C
.\test.c,C:\SOURCE\PMAGA\TEST.C,TEST.C
実際にはpmagaやtest.cが小文字であっても上の例のように大文字になってしまいます。 大小文字が異なっていてもファイル操作に関して害はありませんが、見た目はよくありません。 これを回避する最良の方法は解りませんが、FindFirstFileを使うと大小が区別されるので この関数を使ってフルパス名を修正しています。あまりスマートな方法ではないので、 ほかに良い方法をご存知の方はメールで情報をお寄せください。