アプリ版:「スタンプのみでお礼する」機能のリリースについて

VS2012のVBでコードを書きはじめました。OSはWin7(x32) 日本語です。
ファイルを呼び出そうと思っても呼べずに困っています。

FileName = "c:\textfile.txt"
ret = LoadFile(FileName)

としたときに、”textfile.txt“にアクセスできないのは、デバッグモードで実行したときに”\”がバックスラッシュとして扱われているからではないかと疑っています。
原因を探っていくうちに下記を疑い始めました。

Dim FileName As String
FileName = "\"

として、デバッグモードでFileNameの値を見ると円マークではなくバックスラッシュになっています。
しかし、FileNameの値をテキストボックスに出力させると円マークです。

(1)このような状態でもパス名に問題は無いのでしょうか
⇒どちらも同じASCIIコード92だから、内部で92を渡すだけだから問題ない?

(2)Visual studio内でキーボードを選択する部分があるのでしょうか?

A 回答 (5件)

> 3台のPCで試してみました



いやだから円マークとバックスラッシュは無関係だって。

デスクトップ等へアクセスする際のパスが間違っている。
またはアクセス権の問題。

プログラムを実行しているユーザーではなく、同じ PC 内の他人のデスクトップへアクセスしようとしているんじゃなければ、私は限りなく前者だと思っている。

Windows 7 環境で動かないっていうケースで、実際にどんなパスでためしているのでしょうか。
プログラムの中に直接パスを記述しているのでしょうか。
一般的に特殊フォルダーへアクセスする際は下記のような手法でパスを組み立てます。
http://dobon.net/vb/dotnet/file/getfolderpath.html
    • good
    • 0
この回答へのお礼

何度もすみません。バックスラッシュの件ありがとうございます。おっしゃるとおりでした。

おっしゃるとおりアクセス権を疑っていますが、ファイル側にも現在ログインしているユーザーのアカウントでアクセス権はありますし、ためしにアドミニを有効にしてログインしなおしてみましたがやはりダメでした。

パス名は試しに直接打ち込んで見ましたがやはりダメです。

FileName = "C:\Users\(ユーザー名)\Desktop\Child\(ファイル名)"

リンク先にあった関数で取得してみても、デバッグモードで"FileName"の値を見る限り同じパス名になりますが、やはりファイルにアクセスできません。

FileName = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
FileName = FileName + "\Child\(ファイル名)"

ずっとXPでアクセス権なんて考えずにやってきたので、何が分かっていないのかも分かっていないみたいです。

お礼日時:2013/03/25 14:52

> 実際にはファイルの場所はデスクトップです。



デスクトップの場所は、WindowsXPとWindows7で異なりますが、その点は影響ありませんか?

ちなみに、回答3はVBでは関係ないです。

この回答への補足

3台のPCで試してみました

VS2012ProのVB@Win7(x32) 
FileNameのテキスト出力:\は\
FileNameのデバッグモードでの値確認:\はバックスラッシュ
×ファイルが読めない

VS2008ExpressのVB@Win7(x64) 
FileNameのテキスト出力:\は\
FileNameのデバッグモードでの値確認:\は\
×ファイルが読めない

VS2008ProのVB@WinXP(x32)
FileNameのテキスト出力:\は\
FileNameのデバッグモードでの値確認:\は\
○ファイルは読める

やはりOSのせいかなという感じです。

補足日時:2013/03/22 16:16
    • good
    • 0
この回答へのお礼

再度ご回答ありがとうございます。パス名はフルパスを直接打ち込んでも試しています。XPでは”デスクトップ”というのが2バイト文字なので文字数のカウントで問題になってMyDocumentsに移しましたが、Win7では”desktop”なので問題ないはずで。アクセス権の問題化と思ってWin7では”desktop”やdocumentsなどいろいろな場所にファイルをおいてみましたがうまくいきません。

でもたぶんWin7というOSに関係する何かだと思って調べています。

お礼日時:2013/03/22 16:11

エスケープシーケンス


文字列中にバックスラッシュを入れたいときは\を2つ続けます
FileName = "c:\\textfile.txt"
Visual Studioだからということではありません
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

これも調べましたが関係ありませんでした。

お礼日時:2013/03/22 16:16

ファイルにアクセスできないのは、円マークのせいではなく、セキュリティの問題じゃないでしょうか?


WindowsがVista以降なら、Cドライブのルートへの書き込みは、強力に制限されています。
作業用のフォルダを作成して、その中に作成ならできます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>Cドライブのルートへの書き込みは、

申し訳ありません。簡単にするためにルートのように書きましたが、実際にはファイルの場所はデスクトップです。

お礼日時:2013/03/21 23:08

U+005CがREVERSE SOLIDUSで表示されるか,U+00A5の如くYEN SIGNで表示されるかは,単にフォントの問題です。


私はConsolasをテキストエディタのフォントに指定しているので,U+005CはREVERSE SOLIDUSで表示されます。

ファイルにアクセスできないのであれば,通常IOExceptionが発生すると思いますが,例外のメッセージなどは出ていないのですか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

例外というか、ファイルを読み込む関数をdllから呼んでいるのですが、そいつが"-1"(読めませんでした)という値を返してきます。それ以上の理由がわかりません。

ちなみに同じコードをVB2008@WinXP(x32)で動かしたら問題なく動きます。そちらでは¥は常に¥で表示されます。

お礼日時:2013/03/21 23:07

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