• 締切済み

パスの省略形を作成するには

よく、長いパスを表示するときに「c:\...\tmp\name.txt」のように、パス名の途中を「\...\」で省略して表示しますが、この省略形のパスを作成するAPI、サンプル等がありましたら、教えて頂けませんでしょうか。 WindowsNT4でVC++6.0を使って開発しております。

みんなの回答

回答No.3

shlwapi.dll version 4.71以降が使用できるという条件下であれば、 PathCompactPath()/PathCompactPathEx()で、作成できますよ。 msdnの解説を参考にしてください。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathcompactpath.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathcompactpathex.asp

参考URL:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/path.asp
akubiII
質問者

お礼

とても参考になりました。 ありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

補足です。 DT_MODIFYSTRING をいっしょに指定すれば、出力した文字列を取得できるとのことです。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

文字列を作成するのではないのですが、DrawText()で、省略形文字列を出力することは可能です DT_PATH_ELLIPSIS を指定すればOKです。

参考URL:
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_drawtext.htm
akubiII
質問者

お礼

お礼を書いたつもりだったのですが、、まさか書き忘れておりました。 大変失礼しました。 DrawTextで指定できるとは以外で、参考になりました。 ありがとうございました。

関連するQ&A

  • VC++でコンソールアプリのパスの対応の問題

    今、VC++でコンソールアプリをやっていますが、アプリのイメージとして sample.exe -f C:\a.txt -d のコマンドで、C:\a.txtのファイルを削除し、 sample.exe -f C:\a.txt -s で、ファイルをコンソールに表示するようにしたいですが、問題は指定されたパスの問題ですが、内部でファイルのfopenとか、removeとは、C:\\a.txtしないといけないようですが、 コマンドから入力したパスに対する処理は、どうすればよろしいでしょうか?よろしくお願いします。

  • パスからファイル名を取り出すには?

    ファイルのアップロードの際、パスからファイル名のみを取り出そうと思ったのですが、Shift-JISの、エスケープ文字(日本語のファイル名の場合)の関係で困ってます。 具体的には $path = "C:\\temp\\表\示.txt"; という$pathから、 表示.txt のみを取り出したいということです。 $path =~ tr/\\/\//; $path = substr($path,rindex($path,"/")+1); や use File::Basename; $path = fileparse($path); などなど、いろいろやってみたのですが、 示.txt となるものしか見つかりませんでした… 速度や環境依存の関係のため、モジュールや、外部スクリプト、正規表現はあまり使いたくないのですが、何か良い案はないでしょうか?

  • ショートファイルネーム→ロングファイルネームへの変換

    省略されたファイルパス+ファイル名を元の省略されていないファイルパス+ファイル名に戻したいのです。 1階層であれば、FindFirstFileが使える様ですが、一度にすべてを戻したい場合、いい関数はありますか? 例) c:\tmp\te~\tes~\te~\te~.txt ↓ c:\tmp\test1\test2\test3\test.txt

  • 絶対パスからのファイル名の切り離し

    VC++6.0でCのコードを書いています。 絶対パスからのファイル名の切り出し方に関して質問です。 FILEPATH="C:\TEST\test.txt" というファイルがあるとして "C:\TEST"と"test.txt"の部分を切り離したいと思っています。 フォルダ位置は可変("C:\TEST\TEST"が来ることもある。) このときに FILEPATHの先頭アドレスから最後まで \マークがいくつ来ているか判断して 最後の\マーク以降とそれ以前を strcpyなどでコピーすればできると思うのですが、 この際、 1.\マークの数を数える 2.最後の\マークの手前までパス名をコピー 3.最後の\マーク以降をファイル名としてコピー という作業が必要になると思いますが もっと簡単に行う方法があればお教えいただければと思っています。 (標準関数を使用して・・・など) よろしくお願いします。

  • バッチファイル パス名に( )や!がある場合の対処

    2つのフォルダの配下にあるすべてのファイルが一致していることを確認する 下記のtest.batのプログラムでは、フォルダ名やファイル名の中に、 ()や!が含まれていない時は正しく動作しますが、 含まれていると正しく動作しません。 (問1) パスに( )が含まれている場合 (例)set x=C:\tmp\sample\DATA(1)_SP\   set y=C:\tmp\sample\DATA(2)_SP\ は、 echo !j:%x%=!>> list1.txt の所で 「_SP\ の使い方が誤っています。」 と表示されて正しく動作しませんが どのようにすればよいでしょうか。 (問2) echo !j:%x%=!>> list1.txt を echo !j:!x!=!>> list1.txt にすると、環境変数xの部分が空白に置き換わらないのですが なぜでしょうか。 (問3) パスに!が含まれている場合 (例)DATA1とDATA2の配下に!ABCというフォルダがある場合   C:\tmp\sample\DATA1\!ABC\… は、 for /F "delims=" %%i in (list01.txt) の取り出しの時に!が抜け落ちてしまい 以後の処理が正しく行えません。 !が抜け落ちないようにするには どのようにすればよいでしょうか。 よろしくお願いします。 ---test.bat---------------------------------------------- setlocal enabledelayedexpansion @echo off set x=C:\tmp\sample\DATA1\ set y=C:\tmp\sample\DATA2\ if exist list1.txt del list1.txt if exist list2.txt del list2.txt dir /b /s /a-d %x% > list01.txt dir /b /s /a-d %y% > list02.txt for /F "delims=" %%i in (list01.txt) do ( set j=%%i echo !j:%x%=!>> list1.txt ) for /F "delims=" %%i in (list02.txt) do ( set j=%%i echo !j:%y%=!>> list2.txt ) fc /n /w list1.txt list2.txt > result.txt if ERRORLEVEL 1 ( set /p z="両者は一致しませんでした。" goto :EOF ) else ( if exist result.txt del result.txt ) set cnt=1 set err_cnt=0 for /F "delims=" %%i in (list1.txt) do ( set /p<NUL=[!cnt!] fc /n /w "%x%%%i" "%y%%%i" >> nul if ERRORLEVEL 1 ( echo [!cnt!] %x%%%i >> result.txt fc /n /w "%x%%%i" "%y%%%i" 2>&1 >> result.txt set /a err_cnt=!err_cnt!+1 ) set /a cnt=!cnt!+1 ) echo; if %err_cnt%==0 ( set /p z="両者は完全に一致しました。" ) else ( set /p z="%err_cnt% 個が一致しませんでした。" ) ------------------------------------------------- 【動作環境】Windows7 コマンドプロンプト(Ver.6.1.7601)  

  • opencvプログラミング エラー

    C++ opencv2.3.1 visual studio 2008 の環境でプログラミングをしているのですが、 以下のようなエラーが出て解決出来ずに困っています。 ------------------------------------------------------------------ 【エラーが出る箇所のソースコード】 if ((tmp_img = cvLoadImage(jpg_name, CV_LOAD_IMAGE_COLOR)) == 0){ free(jpg_name); return -1; } 「jpg_name」には、パスを含むjpgファイル名が記述されたtxtファイルを引数とし、 そのtxtファイルから読み込んだjpgファイル名を格納してあります。 ------------------------------------------------------------------ 【エラー内容】 「jpg_name」にパスも含めて正しくjpgファイル名が格納されているのに tmp_imgに画像が読み込まれず、 if文内のfree、return -1 が実行され、 プログラムが終了してしまいます。 デバッガのウォッチ上では、 「tmp_img」は<未定義の値>、 「cvLoadImage(jpg_name, CV_LOAD_IMAGE_COLOR)」は 「エラー:マネージEEは式の構文を理解しません」と表示されています。 ------------------------------------------------------------------ 解決方法をご存知の方がおられましたら よろしくお願い致します。

  • ファイルストリームからファイル名とパスの取得

    例えば、 ofstream file( "ttt.txt" ) としてファイルストリームを作った後で、このインスタンスを使ってfileが指しているファイルのファイル名やファイルのパスを取得することはできるのでしょうか。C及びC++の勉強をしていまして、できればOSやコンパイラに依存しない方法があれば知りたいと思っております。また、WindowsXP、VC++6.0(MFCは使っていません)を使っていますので、これらに依存した方法があるようでしたら教えていただけないでしょうか。お願いします。

  • FirefoxでFormのfileでファイルのパスが取得できない

    フォーム<form>内のファイル名入力フィールド<input type="file">をPOSTで取得すると、IE6では「パス名:ファイル名」が取得されるのですが、Firefox2.0では「ファイル名」しか取得できません。 FirefoxでもIEと同様に「パス名:ファイル名」を取得するにはどうしたらよいでしょうか? 例えば、デスクトップに「a.txt」ファイルがあれば IE6では「C:\\Documents and Settings\\Administrator\\デスクトップ\\a.txt」 Firefox2.0では「a.txt」 と表示されます。 FirefoxでもIEと同じようにするにはどうすれば良いでしょうか? よろしくお願いします。 以下はソースです。 ---------------------ソース-------------------------------- <html> <body> <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <input type="file" name="file"> <input type="submit" name="Submit"> </form> <?php echo $_POST['file']; ?> </body> </html> ---------------------ソース--------------------------------

    • ベストアンサー
    • PHP
  • 3.0の絶対パス

    AS3.0です。 ルートのタイムライン上に「menu」と言うインスタンス名のMCがあり、その入れ子に「sample」というインスタンス名のボタンがあり、これをクリックすると飛ぶASを作成したいのですが、絶対パスを入力してもエラーが出ます。 rootはサポートされないようになりましたと・・・ 相対パスでも同じく出ます。 ネットで調べてもrootの記述しか検索できず、3.0のやり方がわかりません。 ちなみに下記を絶対パスにしたいのですが、そもそも 「this.sample_btn.」を相対パスにするのか、「this.gotoAndPlay」を相対パスにするのか、それとも両方するのかすらもわかりません。 よろしくお願い致します。 this.sample_btn.addEventListener(MouseEvent.CLICK,menusample); unction sample(e:MouseEvent):void { this.gotoAndPlay("サンプル"); }

    • ベストアンサー
    • Flash
  • PHPでパスの作成方法に関して

    教えて下さい。 あるファイルを開こうと考えていますが、ファイル名をその都度変更したい為、 変数に格納してあり、その変数を使ってパスを作成しようと考えています。 以下のような記述をしましたが、正しくパスを生成してくれません。 どのような記述をすれば良いでしょうか? 初歩的な質問で申し訳ありませんが、教えて下さい。 <?php print("<TABLE BORDER='0'>\n"); print("<TR>\n"); print("<td width='100' height='20'><font size='2'><A Href='//192.999.999.999/doc/'.'$tmp_no'.'.pdf' Target='_blank'>AAAAA</A></font></td>\n"); print("</TR>\n"); print("</TABLE>\n"); ?> ※ $tmp_noに値が格納されています。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう