• 締切済み

ファイルパスの文字長取得

VC++をやっているのですが、 「openFileDialog->FileName」で ファイルパスを取得すると 「C\\Documents and Sttings\\デスクトップ\\test.txt」 みたいに取得できます。 ファイルパスの文字長を以下のように取得しました。 「openFileDialog->FileName->length」 (↑間違っていたらすいません) このファイルパスの文字長を取得しようとすると 2バイト文字のところを1文字でカウントしているみたいで 2文字分のカウントをしてくれません。 どのようにすれば2バイト文字を2カウントとして 文字長を取得できるでしょうか?

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

WindowsAPIにあるlstrlenを使ってみてはどうでしょう。 http://msdn.microsoft.com/ja-jp/library/cc410906.aspx

  • Gab_km
  • ベストアンサー率40% (20/50)
回答No.2

ご自分で調べられた方が良いでしょう。 というのも、私の説明が必ずしも正解ではないからです。 それでも一応、やり方のようなものは挙げておきます。 2バイト文字、というものがどのエンコードで表されているのか不明ではありますが、ここではShift_JISであると仮定しておきます。 // -------- Code Snippet --------------------------------------- array<Byte>^ bytes = System::Text::Encoding::GetEncoding(932)->GetBytes("ハロー!"); int length = bytes->Length; Console::WriteLine(length); // コンソールには 8 が表示される。 // ------------------------------------------------------------- GetEncodingについて詳しい解説のあるサイト(MSDNライブラリ)を、参考URLに載せておきます。

参考URL:
http://msdn.microsoft.com/ja-jp/library/wzsz3bk3.aspx
  • Gab_km
  • ベストアンサー率40% (20/50)
回答No.1

エンコーディングが分かっているのなら、バイト配列に直してしまう、という方法でどうでしょうか。

rdxs41
質問者

補足

Gab_kmさん、回答有難うございます。 エンコーディングがわかっていません。 どのように行うのでしょうか? 調べるべきだと思うのですが、よろしかったら教えてください。

関連するQ&A

  • ファイルパスの文字長取得

    VC++をやっているのですが、 「openFileDialog->FileName」で ファイルパスを取得すると 「C\Documents and Sttings\デスクトップ\test.txt」 みたいに取得できます。 ファイルパスの文字長を以下のように取得しました。 「openFileDialog->FileName->length」 (↑間違っていたらすいません) このファイルパスの文字長を取得しようとすると 2バイト文字のところを1文字でカウントしているみたいで 2文字分のカウントをしてくれません。 どのようにすれば2バイト文字を2カウントとして 文字長を取得できるでしょうか?

  • 文字列中からファイルパスのみを取得する方法

    テキストファイルからデータを1行ずつ読み取り、 その中にファイルパスがあれば他のファイルに書き出すというロジックを考えています。 文字列は 例えば  include ROOT_PATH."/class/test.txt"; という文字列で、この中から  /class/test.txt という文字列だけを取得したいのです。 現在、拡張子から1文字ずつ前の文字列をチェックしていって、「”」が見つかったらその間の文字列を ファイルパスとしようとしています。 これを1発で行ってくれるような関数等ははないでしょうか?   良いお知恵がありましたらご教授お願いします。

  • 文字列のなかの最後の文字

    宣言した変数にファイルのパスが格納されています。 例: FileName = "C:\My Documents\test\test.txt" この文字列から "test.txt"のみを取り出したいのですが、どうしたら良いのでしょうか? 文字列の一番最後の"\"の位置番号を取得して、次の文字からMIDを使えばいいのかなと思ったのですが、"\"の位置を取得する方法すらわかりません。 もし上記の方法で無理なら代替方法でも構いません。 ちなみにこのパスは毎回違うパスが入ってきます。 よろしくお願いします。

  • [Active Basic]デスクトップのパスを取得

    Active Basicでデスクトップへのファイルパスを取得するための方法を教えていただきたいのですが・・・・ C:\Documents and Settings~っといった感じの絶対パス(?)で取得する方法を知りたいです。 どなたか知っている方、いらっしゃいましたらご教授ください。 お願いします。

  • ファイルパスが取得出来ない(Properties.getProperty使用)

    PropertiesクラスのgetPropertyメソッドを利用して 外部ファイルより値を取得しようとしています。 // ファイルパスの取得 java.util.Properties pr = new Properties(); pr.load(new FileInputStream("sample.properties")); String filePath = pr.getProperty("filePath"); fis.close(); // sample.properties filePath = C:\test\test.txt しかし、エスケープ記号?が問題で下記のようになり うまく取得出来ません。 filePath = C: est est.txt なぜこのような現象が起こるのでしょうか。 また、回避策はありますでしょうか。 よろしくお願いします。

  • 秀丸マクロで、一部文字列を変換後クリップボードコピーしたい

    秀丸マクロで、一部文字列を変換後クリップボードコピーしたい 秀丸マクロで、setclipboard filename;とすると、 現在開いているファイルのフルパスを取得してクリップボードにコピーすることができますが、 この際に\を/に変換して、クリップボードコピーしたいと思いますがうまくいきません。 どうすればよいのでしょうか。。 例) filenameで取得した c:\documents and settings\user\my documents\sample.txt というパスを c:/documents and settings/user/my documents/sample.txt のようにしてから、クリップボードコピーしたい。 意味不明でしたら加筆修正しますのでよろしくお願いします。

  • デスクトップ上の全ファイル取得

    開発環境 WindowsXP,SP2 Visual Studio 2005 VC++ SDK SHGetFolderPath()でデスクトップのパスを取得した後、FindFirstFileによってデスクトップ上の全ファイル及びディレクトリの名前を取得したいと考えております。 SHGetFolderPathで取得したパスは、 C:\Documents and Settings\...\デスクトップ となっており、この文字列をwsprintfで次のように加工しました。 wsprintf(output,"%s\\*.*","C:\Documents and Settings\...\デスクトップ"); このoutputをFindFirstFile,FindNextFile,FindCloseを組み合わせたプログラムでディレクトリ内の全てのファイル及びディレクトリの名前を取得しています。 このプログラムは普通(?)のディレクトリでは有効で、こちらの期待通りの動きをしてくれるのですが、取得したデスクトップのパスを渡すと、デスクトップフォルダ内にはデスクトップという名前のフォルダしかないと出力されます。以下のような感じです。 調査ディレクトリ:C:\Documents and Settings\...\デスクトップ 調査結果 "C:\Documents and Settings\...\デスクトップ"ディレクトリ内のファイル及びディレクトリ:デスクトップ これはWindowsの仕様の動作なのでしょうか。 特殊フォルダであるデスクトップは、FindFirstFileでは調査出来ないのでしょうか? 他に方法はありますか? どうか教えてください。

  • フルパスの中にワイルドカードを使いたい

    ファイル削除のバッチファイルを作成しているのですが、フルパスの中でワイルドカードを使用したいのですが、可能でしょうか? 例として、 C:\Documents and Settings\user\デスクトップ\abc\test.txt C:\Documents and Settings\user\デスクトップ\edf\test.txt C:\Documents and Settings\user\デスクトップ\gh\test.txt を削除させたいです。 別の場所に同名のテキストファイルがあり、それは消したくないので、「*test.txt」とはしたくないです。 試しに下記のようにワイルドカードを使用してみたところNGでした。 del "C:\Documents and Settings\user\デスクトップ\*\test.txt" よろしくお願いします。

  • 【バッチファイル】コマンド上で書いた文字をテキストに表示

    コマンド上で入力した文字を、元々あるテキスト(メモ帳)に 書き出したいのですが、どなたかご存知の方、ご教授願いますm(_ _)m 例)、 ping 192.168.*.***>"C:\Documents and Settings\=====\デスクトップ\%COMPUTERNAME%.txt" ipconfig /all>>"C:\Documents and Settings\=====\デスクトップ\%COMPUTERNAME%.txt" "C:\Documents and Settings\=====\デスクトップ\%COMPUTERNAME%.txt">notepad.exe ↑で作成したテキストに、サービスタグ(仮に、XTZ1234とします)を追記したい ということです。 よろしくお願いいたします。

  • 文字列を特定文字で分割したい

    はじめまして。宜しくお願いします。 現在Access2002のVBAをつかってタイトルのようなことを実現したいと思っています。 Dim a As String Dim b As String という二つの変数を用意して 「C:\Documents and Settings\デスクトップ\test.csv」という文字列が与えられているとき 変数aには「test.csv」を、変数bには「C:\Documents and Settings\デスクトップ\」を 格納しようとしています。 スマートなやり方がわからず、 文字列の右から一文字ずつ比較して行き、何文字目に「¥」が出てくるかをカウントして、right関数とleft関数で分割を行っています。 このような処理を行う場合、なにか適した関数があると思い探しているのですが、 なかなか見つからず、行き詰っています。(そのような関数があるのかも分からず・・) もしもなにかお気づきの方が居られましたら、ご教授宜しくお願いします。

専門家に質問してみよう