省略されたファイルパス+ファイル名を元の省略されていないファイルパス+ファイル名に戻したいのです。
1階層であれば、FindFirstFileが使える様ですが、一度にすべてを戻したい場合、いい関数はありますか?

例)
c:\tmp\te~\tes~\te~\te~.txt

c:\tmp\test1\test2\test3\test.txt

A 回答 (2件)

あっ!


GetLongPathNameはWindowsのバージョンによっては使えません。
FindFirstFileでチマチマやるのをお勧めします。

参考URL:http://www.basicworld.com/bponline/bo041297.htm, http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

すばやい対応に感謝します。
私の場合OKでしたので、組み込み成功いたしました。

お礼日時:2002/04/12 16:19

GetLongPathName

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAとロングファイル名

EXCELのVBAで、「C:\My Documents」のようなロングファイル名を
「C:\Mydocu~1」のような昔のファイル形式にする方法を教えてください。

例えば
ThisWorkbook.Pathで得たパス名がロングファイルだった場合です。


目的は、ある古い別アプリをShellで起動させたいのですが、それの
引数に昔のファイル形式で色々なパスを渡さないといけないのです。
(そのアプリがロングファイル名に対応していない)

ヘルプとか見たんですけど分からないので教えてください。
お願いします。

Aベストアンサー

GetShortPathNameというAPIを使用します。VBAではAPIを使用する前に定義を
書く必要があります。定義は次の通りです。

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" ( _
ByVal LongPath As String, _
ByVal ShortPath As String, _
ByVal ShortPathSize As Long) As Long

以下はサンプルです。

Dim FileName As String * 512
GetShortPathName "Z:\My Document\audio.wav", ShortName, 512
MsgBox Left(FileName, InStr(FileName, vbNullChar) - 1)

Qディレクトリ名をショートファイル名で知る方法は?

こんにちは。
Windows9xなどにおいて、

C:\Program Files\TTERMPRO

のように、ディレクトリ名をロングファイル名ではなく、ショートファイル名で書きたい場合というのが出てくることがあります。(バッチファイルを作成しておくなどの時)

(例の場合には c:\progra~1\ttermpro になるのかも知れない)

DOS窓で dir/s のような見方でファイルではわからなくもないのですが、ディレクトリを知る方法やコマンド等があればアドバイスいただきたく思っています。

Aベストアンサー

dir /A:D
でディレクトリのみが表示されます。
またはDOSプロンプト起動してDOSプロンプトにフォルダをドラッグ&ドロップすれば短いファイル名が表示されます。
なお、バッチファイル等では""で括るとロングファイル名も使えます。
CD "C:\Program Files\TTERMPRO"

dir /?
でDirのヘルプが表示されます。

Qファイルパスのチルダの意味

Windowsのファイルパスについて質問があるのですが、
時々見かけるファイルパスの~(チルダ)はどのような意味があるのでしょうか?
あるショートカットのリンク先がC:\PROGRA~1\となっていたのですが、これはC:\Program Files\と同じ意味なのでしょうか?

Aベストアンサー

>あるショートカットのリンク先がC:\PROGRA~1\となっていたのですが、これはC:\Program Files\と同じ意味なのでしょうか?

はい。同じです。
Windowsにおけるファイルやフォルダの名前の記述法には「ロングファイルネーム」「ショートファイルネーム」の2種類があります。
「PROGRA~1」はショートファイルネーム、「Program Files」はロングファイルネームで同じものを表現したものです。

なぜ2種類の記法があるか解説します。
Windowsの祖先であるMS-DOSはファイル名は8文字まで、拡張子は3文字までしか使えませんでした。
Windowsでもその名残を受け継ぎ、過去との互換性のため「ファイル名8文字/拡張子3文字」のショートファイルネームと、名付けやすく見て理解しやすい長いファイル名(ロングファイルネーム)を同時に保持するようになっています。
こうすることで、MS-DOSで動作しているPCにファイルを持って行ってもちゃんとファイルが見えるようにしてあるのです。

さてチルダ(~)の意味ですが、これは「ファイル名が省略してある」ということを示していると理解してもいいでしょう。
省略の規則ですが、
 ・ファイル名が8文字を越えたら、先頭6文字+後ろに「~1」をつける
 ・同じ場所に「Program Files」「Program Filesじゃないよ」という2つのフォルダがあった場合、ASCII文字コード順で後ろになる方は先頭6文字+後ろに「~2」をつける
 ・同様に名前の先頭6文字が重複するファイル・フォルダが3つ以上あった場合はチルダの後ろの番号が増えて行く
という感じになっています。

>あるショートカットのリンク先がC:\PROGRA~1\となっていたのですが、これはC:\Program Files\と同じ意味なのでしょうか?

はい。同じです。
Windowsにおけるファイルやフォルダの名前の記述法には「ロングファイルネーム」「ショートファイルネーム」の2種類があります。
「PROGRA~1」はショートファイルネーム、「Program Files」はロングファイルネームで同じものを表現したものです。

なぜ2種類の記法があるか解説します。
Windowsの祖先であるMS-DOSはファイル名は8文字まで、拡張子は3文字までしか...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QGetLongPathName関数について

VB6でTempフォルダをGetTempPath関数で取得するとショートファイル名でパスが返るので、
取得したショートファイル名をGetLongPathName関数でロングファイル名にしようと
しているのですが上手く出来ません。

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetLongPathName Lib "kernel32" Alias _
"GetLongPathNameA" (lpszShortPath As String, lpszLongPath As String, _
cchBuffer As Long) As Long

Dim nName As String
Dim Ret As Long
Dim Buf As String
nName = String$(260, vbNullChar)
Ret = GetTempPath(Len(nName), nName)
nName = Left$(nName, InStr(nName, vbNullChar) - 1)
Buf = String$(260, vbNullChar)
Ret = GetLongPathName(nName, Buf, 260)
Buf = Left$(Buf, InStr(Buf, vbNullChar) - 1)

Tempフォルダはショートファイル名(C:\DOCUME~1\Owner\LOCALS~1\Temp\)は
取得されますがGetLongPathName関数でロングファイル名が
返りません、戻り値は0が返ってしまいます。
コードが間違えているのか、元々取得出来ないのか分かりませんが
ご存知の方教えて下さいますようお願い致します。
尚、可能ならばFindFirstFile関数でロングファイル名を取得するのではでなくて
GetLongPathNameで取得したいと思っています。

VB6でTempフォルダをGetTempPath関数で取得するとショートファイル名でパスが返るので、
取得したショートファイル名をGetLongPathName関数でロングファイル名にしようと
しているのですが上手く出来ません。

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetLongPathName Lib "kernel32" Alias _
"GetLongPathNameA" (lpszShortPath As String, lpszLongPath As String, _
...続きを読む

Aベストアンサー

(回答)
 Declare文の定義が間違っています。GetTempPathでは、
Byvalがついているのに、GetLongPathName ではついていないですよね。
この場合は、すべてByvalが必要です。
 なお、GetLongPathName は、Win98以降で使用可能です。
Win95では、使用できないので注意してください。
 
(アドバイス)
1.Declare文の定義の仕方
 WindowsAPIのDeclare文の定義方法は、MSDN(ヘルプ)
に記載されていますので、WindowsAPIを使うなら理解して
おいたほうがいいです。

Visual Basic ドキュメント
 + Visual Basic の使用方法
  + コンポーネント ツール ガイド
   + DLL および Windows API へのアクセス
    + DLL プロシージャの宣言

2.Netでサンプルをゲット
 API名がわかっていれば、以下のキーワードで検索
してみればサンプルが見つかるのでは
 「GetLongPathName VB」
 キーワードに、最初はVB を入れて検索、見つからないときは
VBをはずすと検索する効率がいいと思います。

3.APIのエラーの調べ方
 WindowsAPIでエラーの場合は、Err.LastDllErrorに
エラーコードが入っているので、Cのヘッダーファイルで
調べるか、WindowsAPIのFormatMessage関数で調べられます。

(回答)
 Declare文の定義が間違っています。GetTempPathでは、
Byvalがついているのに、GetLongPathName ではついていないですよね。
この場合は、すべてByvalが必要です。
 なお、GetLongPathName は、Win98以降で使用可能です。
Win95では、使用できないので注意してください。
 
(アドバイス)
1.Declare文の定義の仕方
 WindowsAPIのDeclare文の定義方法は、MSDN(ヘルプ)
に記載されていますので、WindowsAPIを使うなら理解して
おいたほうがいいです。

Visual Basic ドキュメント
...続きを読む

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qフォルダ名長さの上限

Windows XPのころはフォルダおよびファイル名の上限が255文字でしたが、
Windows 7 64bitではこの上限は解消されたのでしょうか?


検索してもなぜか情報が見つからなかったので
よろしくお願い致します。

Aベストアンサー

NTFSの内部構造はマイクロソフトからは公開されていませんが、第三者のドキュメントによると名前の長さを示すフィールドは1バイトしかないようです。従って255文字が限界となります。またVFATの長いファイル名も255文字までです。
WindowsがNTFS/FAT以外のファイルシステムを採用するか、大幅な仕様変更がない限りはファイル名は255文字が限界のまま変わらないでしょう。
なお、パス長に関してはUnicode文字のWindows APIでは32767文字まで対応するようです。ファイルシステムが対応すればファイル名長の拡大は可能でしょう。ただし未だにMAX_PATH=260に縛られるアプリケーションも多いようですので、たとえファイル名長を拡大しても対応が進むのには時間が掛かると思われます。


人気Q&Aランキング