tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSystem.IO.Directory.Existsについて
記事No9924
投稿日: 2010/03/03(Wed) 18:14
投稿者皐月
いつもお世話になっております。WindowsXP VB2005で開発を行っています。
ファイルが存在するかを以下のSystem.IO.Directory.Existsで取得したいのですが、上手く行かないのでご存知の方ご教授ください。
以下にソースを記述します。操作の流れとしては

ファイルが存在するかチェック
存在する場合読み取り属性を外す
ファイルの書込み
ファイルを読み取り属性にする

ということをしたいのですが、ファイルが存在するかのチェックIf System.IO.Directory.Exists(DataFile) = True Thenでファイルが存在するのに処理を抜けてしまい読み取り専用となっているファイルに書き込もうとしてしまうのでエラーが発生してしまいます。DataFileにファイルの名称"xxxx.dat"としているのが悪いのかと思い、"D:xxxxxxxx\bin\Debug\xxxx.dat"のようにして直接指定してみたのですが上手くいきません。
試しに、読み取り専用になっているファイルの読み取り属性を外してからもう一度動かすとファイルに書込みができましたが、これでは意味がありません。
If System.IO.Directory.Exists(DataFile) = True Thenの中の処理に入ってもらいたいのですが、どうすればよいのでしょうか?


        ChDrive(My.Application.Info.DirectoryPath)
        ChDir(My.Application.Info.DirectoryPath)

            If System.IO.Directory.Exists(DataFile) = True Then 'ファイルが存在する場合はファイルの属性のチェックを行う
                NewAttributes = OldAttributes And (Not FileAttribute.ReadOnly) '読み取り専用属性の解除
                IO.File.SetAttributes(DataFile, NewAttributes) '新しい属性をセット
            End If
            Fnum = FreeFile()
            FileOpen(Fnum, DataFile, OpenMode.Output)
            For DevNo = 0 To 94
                WriteLine(Fnum, Devicechk(DevNo))
            Next
            FileClose(Fnum)
            IO.File.SetAttributes(DataFile, FileAttribute.ReadOnly) '読み取り専用属性をセット

[ツリー表示へ]
タイトルRe: System.IO.Directory.Existsについて
記事No9925
投稿日: 2010/03/03(Wed) 18:23
投稿者YuO
> ファイルが存在するかを以下のSystem.IO.Directory.Existsで取得したいのですが、上手く行かないのでご存知の方ご教授ください。

ディレクトリでなくファイルの存在可否を調べたいのですよね。
System.IO.Directory.Existsではなく,System.IO.File.Existsで調べてみてはどうでしょうか。

[ツリー表示へ]
タイトルRe: System.IO.Directory.Existsについて
記事No9926
投稿日: 2010/03/03(Wed) 18:24
投稿者Hongliang
Directory.Exists はクラス名通り「指定したディレクトリが存在するかどうか」を判定するものですから、たとえ同名のファイルが存在しても False を返します。
ファイルが存在しているかどうかは File.Exists を使います。

[ツリー表示へ]
タイトルRe^2: System.IO.Directory.Existsについて
記事No9942
投稿日: 2010/03/05(Fri) 08:52
投稿者皐月
YuO様、Hongliang様回答ありがとうございます。
お礼を言うのが遅くなってしまい申し訳ありません。
File.Existsで解決できました。

[ツリー表示へ]