• 締切済み

C#でフォルダをロックする方法

C#でフォルダをロックする方法を教えて下さい。 実現したい挙動は、こんな感じです。 1, コマンドプロンプトで、カレントディレクトリを「C:\test」にする 2, その状態で「C:\test」を削除しようとする 3, 「別のプログラムがこのフォルダを開いているので、操作を完了できません。」(Vistaの場合) つまり、フォルダはコマンドプロンプトのカレントディレクトリになっている間は削除することができませんが、これをコマンドプロンプトではなくプログラムから制御したいのです。(1プログラムで複数) ちなみに、ファイルをロックするのは stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None); という記述でできましたが、わかっていたことですが、フォルダではやはり失敗します。 よろしくお願いします。

  • vat7
  • お礼率80% (4/5)

みんなの回答

回答No.2

これは、いかがでしょう? Directory.SetCurrentDirectory(dir);

noname#152572
noname#152572
回答No.1

一番簡単なのはダミーファイルを作ってオープンする事ですかね。

vat7
質問者

お礼

ありがとうございます。 確かに、それなら質問で提示した条件はクリアできますね。 費用対効果を満たした、素晴らしい解決策だと思います。 しかしごめんなさい。 私の質問の条件はクリアできますけど、ダミーファイルは作りたくないんです。

関連するQ&A

  • ファイルのロック

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

  • windowsのC#での話です。あるプロセスが断続的(数秒程度で一定し

    windowsのC#での話です。あるプロセスが断続的(数秒程度で一定しません)に、ログファイルをオープンして内容を書き込んでファイルをクローズして、、、ということをやっています。で、そのログファイルをtail -fコマンドのように監視するコードを書きたいのですが、どのように書けばいいのかわかりません。FileStream("logfile.txt", FileMode.Open, FileAccess.Read, FileShare.Read)としてファイルをオープンし、ファイルの最後までseekして、それ以降は永久に、1秒sleepしては該当ファイルの内容を読み込み続ける、というプログラムを書いたのですが、このコードを実行すると、このオープンしたログファイルを他のプログラムからは書き込みのために新たにopenできなくなるようで、他のプログラムがログファイルの書き込みでエラーを出力するようになってしまいました。 tail -fをc#で書くにはどのようなコードを書けばいいのでしょうか。ご教授ください。

  • 同じフォルダのはずが・・・

    Windows10で、WindowsエクスプローラーのCドライブ下を見ると、「ユーザー」というフォルダが存在しています。 一方、コマンドプロンプトでカレントディレクトリが「C:\」の状態で「dirコマンド」を実行すると、上の「ユーザー」に該当するフォルダは「Users」という名前で表示されます。 この「ユーザー」と「Users」の名前の違いは何ですか? よろしくお願いします。

  • コマンドプロンプトでのカレントディレクトリについて。

    WinXPでコマンドプロンプトを使っているんですが、カレントディレクトリを移動する時、cd c:\Program Files ってやりますよね。 Dドライブのlibというフォルダにカレントディレクトリを移したいんですが、cd D:\libとしても、なんの応答もなく元のプロンプト画面のままです。 Dドライブにカレントディレクトリを移動させるというのは、そもそも出来ないものなんですか? 誰か知っている人がいたら教えて下さい。宜しくお願いします。

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

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 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

  • カレントフォルダって何?

    ある目的で、コマンドプロンプトを使っています。その中に、 「ダウンロードしたzipを解凍しコマンドプロンプトのカレントフォルダにコピー」っていう指示があるのですが、「コマンドプロンプトのカレントフォルダ」という言葉の意味がよくわかりません、何かのフォルダの場所の意味なのでしょうか?混乱してさっぱりわからなくなってています。操作に詳しい方どうぞよろしくお願いいたします。

  • 名前の無いフォルダの削除ができない

    ミュージックフォルダに名前の無いフォルダができてしまい、削除することができなくなってしまいました。 ネットで色々調べ、コマンドプロンプトを開き cd“C:\Users\<ユーザー名>\Music\ " とやってみたのですが、 何度やっても「ディレクトリが空ではありません」 と出てきて削除されません。 どうすれば削除できますか? Windows Vistaを使っています。

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

    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が発生してしまい 困っています。 メモリ不足にならない、何か別のやり方があればご教授いただけないでしょうか。 宜しくお願いいたします。

  • C++ で DIR コマンド

    MS-DOSプロンプトで dir と入力すれば、フォルダ内の 様子がMS-DOSプロンプトに表示されるけど、 C++ で、MS-DOSプロンプトで dir と入力したのと同じ 様にするにはどういうプログラムを作ればいいのですか? 別の言い方で書くと、実行すればMS-DOSプロンプトが 起動し、dir と入力されて dirコマンドが実行される というファイルを作るソースが知りたいんです。 dirコマンドが実行される対象となるディレクトリは どこでもいいんです。 C++ のプログラムでも、ディレクトリ構造を出力することが 出来ると思うんだけど、MS-DOSプロンプトでやってみたいんです。 どうしてそんなことがしたいのかというと、C++ が難しそうだから という理由なんです。 例えば、ファイルコピーを自動化するプログラムを作る時、 C++ のプログラムの出力をMS-DOSプロンプトへ渡す方法を知っていれば、 MS-DOSプロンプトでのコピーは copy コピー元 コピー先 という簡単な書式だから、ファイルコピーを自動化するプログラムも 簡単に作れそうだなと思ったんです。

  • 教えて下さい:フォルダが削除できません!!

    こんにちは。 あるフォルダを削除しようとしたところ、 「XXXX(フォルダ名)を削除できません。ファイルまたはディレクトリが壊れているため、読み取ることができません」というエラーが表示され、削除することができません。 コマンドプロンプトに「del フォルダのアドレス」を入力したりもしましたが、うまく行きません。 フォルダを削除する方法を教えていただけませんか?

専門家に質問してみよう