• 締切済み

読み取り専用ファイル FileStream でのアクセス

VC++ .NET2003です。 読み取り専用のファイルを FileStream FileMode::Open でオープンしようとすると、 System::UnauthorizedAccessExceptionエラーが発生します。 読み取り専用でも読み込みだけならいいかと思っていたんですが、これは出来ないのでしょうか? 他に読み込みの方法があれば教えて下さい。

みんなの回答

回答No.1

UnauthorizedAccessException例外なので、ファイルに対して読み取り権限も無いのではないでしょうか? ファイルのアクセス権限を確認してみてください。

mot1177
質問者

お礼

自己解決しましsた。 読み取り専用ファイルに対しては、 FileStream( パス, FileMode::Open, FileAccess::Read ); と、アクセスモードできちんと読み込みだけと指定する必要がある事がわかりました。 私の場合は、アクセスモードの指定を省略していたのが原因のようです。ご回答ありがとうございました。

関連するQ&A

  • 【C++/CLI】ファイルオープンに失敗した際のエラー処理

    VC++2005の.NETで言語はC++/CLIにてアプリを作成しています。 FileStream^ fs; String^ file; fs = gcnew FileStream( file, FileMode::Open ); にてファイルをオープンする処理を入れたのですが、 ファイルが存在しない、もしくは何らかのエラー等で、 ファイルが正常に開けない場合のエラー処理は、 どのように判断させればよいのでしょうか? 方法をご存知の方おられましたら、参考例などご教示お願い致します。

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • 画像ファイルの幅と高さを取りたい。

    C Sharp、.Net 2.0の環境で開発しています。 using (System.IO.FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)) { imagew = System.Drawing.Image.FromStream(fs).Width; //横幅 imageh = System.Drawing.Image.FromStream(fs).Height; //高さ } ※filePathに画像のパスを入れてます。 上記で画像ファイル(すべてjpg)の縦横の高さを取得しているのですが、 ファイルが大量にあると途中でOutOfMemoryExceptionが発生してしまい 困っています。 メモリ不足にならない、何か別のやり方があればご教授いただけないでしょうか。 宜しくお願いいたします。

  • ASP.NETからファイル書き込むには

    はじめまして。 ASP.NETで開発をしようとしております(まだ初心者で悪戦苦闘中)。 いま、やりたいことが、ブラウザのボタンを押したときに、サーバ内のファイルに書き込みを行うということです。それだけであれば、FileStreamを使用してできました。が、書き込み先のファイルがVC++6.0のプログラムがファイルオープンにしている状態なのです。VC++のプログラムでは、他のプロセスからアクセスできるようにしてはいるんですが、実際ボタンを押して書き込みにいくと、他のプロセスが使用していますというエラーが返ってきます。 なんとか実現させる方法はありませんでしょうか。 何卒よろしくお願いいたします。

  • 【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。   すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream  (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr =   gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default);  while(sr->Peek() >= 0){ //csvデータ分繰り返し   strLine = sr->ReadLine(); //1行読み込み   strData = strLine->Split(delimiter); //「,」で区切って、配列に分解   if (iWorkNum == int::Parse(strData[0])){    strData[2] = strWorkTime;//書き換えたい箇所はここだけ    //※ここからの処理方法を教えて下さい。   }  } } sr->Close(); fs->Close();  

  • ファイルのロック

    VB2005です。 以下のコードでファイルを読み取り専用モードで開いています。 FileStream("ファイルパス", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 開くファイルはテキストエディタ等で開くだけでも1分近くかかるファイルです。 上記コードでも、開いているであろう時間(約1分)くらいは ファイルをロックしているようです。 開ききってしまえば、ロックは解除されているようなのですが。 やはりそのファイルを開ききるまではロックしてしまうのでしょうか? これをロックさせない方法はありますか? やりたいことは、開いたファイルの内容を 特定なバイト数で区切、改行キー(終端記号)を加えて 別のファイルに書き出しています。

  • AccessVBA:読込専用ファイルを開きたい

    いつもお世話になっております。 Access2000を使用しております。 自MDBから別のMDBファイルのアクセスを行う際に OpenDatabaseメソッドを使用しているのですが、 対象のMDBファイルが読込専用である場合に 以下のエラーが発生してしまいます。 エラーコード   :3051 エラーメッセージ ::ファイル 'C:\***.MDB' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。 MDBファイルは書き込みを行いたいということではなく、テーブル名を参照したいだけなので、 読込専用のファイルでもアクセスしたいのですが、 Set db = OpenDatabase(fl, , True) といったように第3引数read-onlyの引数をTrueにしても同様のエラーが発生してしまいます。 読込専用のファイルは開くことが出来ないのでしょうか? ご教示の程、何卒よろしくお願いいたします。

  • 読み取り専用ファイル・・

    質問させて頂きます。 Windows Vista使用で筆まめ20を購入しました。 今までの筆まめ17は何故か不調になってしまい、インストールも出来なくなってしまったからです。筆まめ17の住所等のバックアップデータの読み込みをしましたが、「読み取り専用ファイルです。参照、編集、印刷は出来ますが、上書き保存は出来ません」との、エラーメッセージが出ます。 ファイルのプロパティでは読み取り専用になっていないのですが、読み取り専用ファイルの解除方法や、肝心の上書き保存の出来る様にするには、どうすれば良いのでしょうか? どうぞよろしくお願いします。

  • VB2005でのテキストファイルのアクセス権

    ある条件の下テキストファイルを出力していますが、 出力ファイルを開いた状態で、再度ツールを実行すると 「別のプロセスが・・・アクセスできません。」 というエラーにはじかれてしまいます。 現在VB2005を使用していますが、以前VB6のときはエラーに なりませんでした。 ※Excelの場合はエラーになっていましたけど。 以下私のコードを抜粋 strNewDirはString型でパスが入っています。 Dim stFile As Stream = New FileStream(strNewDir, FileMode.OpenOrCreate) Dim encSJIS As Encoding = Encoding.GetEncoding("shift-jis") Dim swSJIS As StreamWriter = New StreamWriter(stFile, encSJIS) ・・・ swSJIS.Close() という形でファイルアクセスしています。 New FileStreamには[Access]や[Share]などがあるようで、 いろいろ試しましたが、どうもうまくいきません。 ご存知の方いらっしゃいますか?

  • C#テキストファイルから1バイト除去する

    数ギガのテキストファイルがあり、語尾の1バイト(EOF)を瞬時に除去したいと思います。 バイトで読んで1バイトのみ出力しないと言う方法が一番簡単ですが、時間がかかる上、巨大ファイルには向きません。 下記語尾を置換するソースを書きましたが、除去の方法がわかりません。初心者ですので、簡単にお願いします。 FileStream fs = new FileStream("test.txt", FileMode.Open); byte[] b = new byte[1]; fs.Seek(fs.Length - 1, SeekOrigin.Begin); fs.Write(b, 0, 1); fs.Close();

専門家に質問してみよう