こんにちは、honiyonです。
 Windowsについて質問です。

 Explorerであるフォルダを表示しておいた場合に、フォルダ内にファイルの作成・削除等の変更があると自動的に再表示されます。

 これはどのような仕組みになっているのでしょうか?
 もしかして数秒単位でスキャンを行っているだけ?

 任意のフォルダ内の変更を検知するプログラムを作りたいと考えています。
 何か数秒単位でスキャンより効率の良い方法は無いかと考えているのですが...

 宜しくお願いします(..

 

このQ&Aに関連する最新のQ&A

A 回答 (2件)

書き間違い。


FindNextChangeNotification(hNotification);

FindNextChangeNotification(hNotification[1]);
    • good
    • 0
この回答へのお礼

こんにちは、honiyonです。

 ご回答ありがとうございます。
 各APIを調べて早速実験&成功しました(^^)

 ありがとうございました(..

お礼日時:2002/02/01 12:10

かなり適当に書きますが、やりたい事はわかってもらえると思います。



---- メイン側 ----
HANDLE hNotification[3];

void Start()
{
hNotification[0] = CreateEvent(NULL, TRUE, FALSE, NULL);
hNotification[1] = FindFirstChangeNotification(...
hNotification[2] = CreateThread(...
}

void Stop()
{
SetEvent(hNotification[0]);
WaitForSingleObject(hNotification[2]);
FindCloseChangeNotification(hNotification[1]);
CloseHandle(hNotification[0]);
CloseHandle(hNotification[2]);
}

---- 通知取得スレッド ----
for(;;)
{
switch (WaitForMultipleObjects(2, hNotification, FALSE, INFINITE))
{
case WAIT_OBJECT_0:// 終了イベント
ExitThread(0);

case WAIT_OBJECT_0 + 1:// 通知イベント
<何らかの方法でメイン側に通知する>;
FindNextChangeNotification(hNotification);
}
}
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

QC++とC#

C,C++と進みC#
Visual C#がありますが
C++とC#の違いを教えてください.
C++とJAVAをたしたようなもの
なのでしょうか?

Aベストアンサー

文法/構文上の類似点は多々ありますが、「別物」です。
その相違について掲示板で列挙できるものではありません。
# 本を読んでください。

Qフォルダ内の更新日付の変更の仕方

閲覧いただきありがとうございます。
ご質問の件ですが
フォルダに存在する
全てのファイルの更新日付を
システム日付の日時にしたいと思います。
また、フォルダの中にフォルダが存在する、複数階層です。

こういった方法はありますでしょうか?
ツールやコマンドがありましたら教えていただけませんでしょうか?
言語はDosバッチかJAVAだとうれしいです。

Aベストアンサー

少し違うかもしれませんが、僕が使っているのはAttributerと言うフリーソフトです。
http://www.vector.co.jp/soft/winnt/util/se158608.html
ファイルやフォルダのプロパティページに「アトリビュート」タブが追加されます。
(エクスプローラーからファイル・フォルダを選択し、右クリック→プロパティ)
「アトリビュート」タブでフォルダ内の全ファイルの更新日時を変更できます。

もしもシステム日時を自動で反映させたい…などでしたらAttributerでは無理です。
以下から目的にあったものを探されてください。
http://search.vector.co.jp/search?query=%83%5E%83C%83%80%83X%83%5E%83%93%83v

QC#とC++/CLIの連携について

C#とC++/CLIの連携について
C++/CLI側にC#で作成した変数を渡したいのですが、やり方がわかりません。

そもそも一つのソリューションにC++/CLIとC#を混在することはできるのでしょうか。
やはりC++/CLI側はDLLにして、C#がそのDLLを利用するのでしょうか。

Aベストアンサー

.NETの各種言語は混在することができます。
たとえば、C#でGUIの設計をし.NET用DLLを作成し、内部処理をC++でWin32APIを使って書き、C++/CLIでラップして、GUIと結び付ける、とかもできます。

「変数を渡す」というのが表現として良く分かりませんが、変数というよりはクラスを共有する感じになるかと思います。

とはいえC++/CLIはネイティブコードとマネージドコードを混ぜれるがゆえに、逆に色々と問題があるので、ちゃんとネットや本で調べたほうが良いかと思います。

Q言語[C#]..フォルダ選択ダイアログで、フォルダ選択のための階層が表示されない

C#を使い、フォルダ選択のダイアログを表示させたいと思っています。WEB上に公開されていた下記コードを使い、フォルダ選択のダイアログを表示できました。
ただ、ダイアログが表示されたのはよいのですが、ダイアログ内に表示されるはずの、フォルダ選択のための階層部分が表示されません。この現象についてご存知の方、助言を頂きたくお願い致します。
また、C#は一昨日から使い初めたばかりです。初歩的なミスであった時は、どうぞお許し下さい。

フォルダ選択ダイアログの表示コード
------------------------------------------------
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "読み込むフォルダを指定してください" ;

if (fbd.ShowDialog() == DialogResult.OK)
{
txtInputFolder.Text = fbd.SelectedPath ;
}
------------------------------------------------

C#を使い、フォルダ選択のダイアログを表示させたいと思っています。WEB上に公開されていた下記コードを使い、フォルダ選択のダイアログを表示できました。
ただ、ダイアログが表示されたのはよいのですが、ダイアログ内に表示されるはずの、フォルダ選択のための階層部分が表示されません。この現象についてご存知の方、助言を頂きたくお願い致します。
また、C#は一昨日から使い初めたばかりです。初歩的なミスであった時は、どうぞお許し下さい。

フォルダ選択ダイアログの表示コード
------------------...続きを読む

Aベストアンサー

質問のコードで特に問題ありません。
ダイアログ内が何も表示されない・空だというような状態なのですか?

QC++ C# 語源

C++とC#(C++++)はかなり大雑把に言うとCの拡張版ですが、なぜ+が二個単位なのでしょうか。
C → C++ → C#
C+とC+++は存在しないのでしょうか。
C → C+ → C++ → C+++ → C#
もし存在しないのであれば、どのような理由でそうなったのでしょうか。

Aベストアンサー

C/C++のインクリメント演算子が、++だからじゃないでしょうか。

QUNIXコマンドでフォルダ内のフォルダをリネーム

初めまして。

質問ですが、UNIXコマンドでフォルダ内のファイルを全てリネームする方法が分からないので教えて下さい。

ファイルの名前は全て同じ文字数で、[***_**_**.csv]となっています。(*は半角英数字です)
リネームの内容としては、二つ目のアンダーバーからピリオドまでを消却したいと思っています。

例えばAWKコマンドで文字数から消却できるのでしょうか?
分かる方には簡単な質問で申し訳ありませんがお願いします。

Aベストアンサー

そのディレクトリの直下だけなら
cd そのディレクトリ
\ls -1 ???_??_??.csv | sed 's/^\(.*\/\)\{0,\}\([^/_]\{3\}_[^/_]\{2\}\)_[^/_]\{2\}\(\.csv\)$/mv & \1\2\3/' | sh

そのディレクトリの下に再帰的にあるなら
find そのディレクトリ -name "???_??_??.csv" | sed 's/^\(.*\/\)\{0,\}\([^/_]\{3\}_[^/_]\{2\}\)_[^/_]\{2\}\(\.csv\)$/mv & \1\2\3/' | sh
# Tacosanさん、ちょっとお借りしてsedを直しました。

いずれも、
(1)ls/findでファイル名一覧を出力。1行に1ファイル
(2) (1)の出力をsedで受けて、 ディレクトリ(\1),ファイル名の前半(\2),後半,拡張子(\3)に分解
→mv [元のファイル名] [ディレクトリ,ファイル名の前半,拡張子] と変換して出力
(3) (2の出力を)sh で実行
です。

sedの「mv」を「mv -i 」にすれば、ファイル名が重なった場合に確認するようになります。
|shを削除すれば、事前に動作確認できます。
sedの「mv」を「mv -v 」にするか、sh のあとに -x を付ければ、実行の様子が出力されます、

そのディレクトリの直下だけなら
cd そのディレクトリ
\ls -1 ???_??_??.csv | sed 's/^\(.*\/\)\{0,\}\([^/_]\{3\}_[^/_]\{2\}\)_[^/_]\{2\}\(\.csv\)$/mv & \1\2\3/' | sh

そのディレクトリの下に再帰的にあるなら
find そのディレクトリ -name "???_??_??.csv" | sed 's/^\(.*\/\)\{0,\}\([^/_]\{3\}_[^/_]\{2\}\)_[^/_]\{2\}\(\.csv\)$/mv & \1\2\3/' | sh
# Tacosanさん、ちょっとお借りしてsedを直しました。

いずれも、
(1)ls/findでファイル名一覧を出力。1行に1ファイル
(2) (1)の出力を...続きを読む

QC#でできてC++でできないことは?(C#のメリットとは?)

これから新しい言語として、C#もしくはC++の勉強をしたいと
考えています。

C#にできてC++にできないこと、あるいはその逆でC++にはできて
C#ではできない。ということがあれば、教えていただけないでしょうか?

感覚としてはC++であれば何でもできるという感じではあるのですが、
C#を使うメリットってどんなことがありますか?
やはり、ビジュアル開発(コントロールのDrag&Dropで画面開発ができる)
の簡単さというところがC#でのメリットでしょうか?

ちなみに私はこれまで、C -> VB -> Java といった順で言語を習得
してきました。

Aベストアンサー

>C#にできてC++にできないこと
無いでしょう。
基本的にC/C++の場合コンパイラの種類に依りますが
内部にアセンブラを書くこともできますから
C/C++で出来ないことはC#でも出来ません。
(勿論#1さんの言われるように言語レベルの仕様で出来ない事はあります。)

簡単さでいうとC#です。VB6の開発経験があるとのことですが
VC#だとVBのフォームを作成するような感じでインターフェースを
作っていけます。(一応VC++でも可能)

一方C#で出来ないことですが
当然ですがフレームワークに依存しないソフトを作る事が出来ません。
Javaで作ったソフトがJREを必要とするのと同じです。
他にはCPUの特殊な命令(SSEやMMX)を呼び出すとかドライバの開発等も出来ません。

ちなみにVC++でもフレームワークは使えるので
フレームワークのガベージコレクション等を使うことは可能です。
(ただフレームワークを使うならC#の方が簡単です。)

Qフォルダ内の指定ファイルをzip形式で圧縮してほかのフォルダにいれる。(vbscript)

vbscriptを学び始めたものです。よろしくおねがいいたします。http://www.hatena.ne.jp/1123181645
いまインターネットで見つかったソースを拝見しています。これはフォルダ内のすべてのファイルを一個ずつ圧縮して保存するが何とか直して指定ファイルにしたいですが
どこに手を入れればいいかわからなくて質問させていただきました。わかる方がいるならぜひともご教授ください!

Aベストアンサー

>うまくいきませんでした。
file = "filePath"
みたいにしてませんか
file = fso.GetFile("filePath")
ようにすれば大丈夫だと思いますが・

QC#でCのコンソール出力の取得

C#でCのコンソール出力の取得
Cで作成したDLLをC#で利用しています。このときDLLファイルはC言語のprintfを使用しています。この出力内容を取得して、C#でテキストボックス等に表示する方法はありませんでしょうか。

Aベストアンサー

使ったこと無いのですが
Googleで調べたところ以下のWebページがヒットしました。

@IT
.NET TIPS
コンソール・アプリケーションの出力を取り込むには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

QExcelで同じフォルダ内にある異なったbook内の

お世話になっています。
Excelで同じフォルダ内にある、異なったbook内の、特定のシートにのみ記述したいと思っています。
具体的には
 ●C:\Documents and Settings\NAKAMURA\デスクトップ\KONKI
というフォルダ内にある複数のBOOK(名前・数は不定です)の中から「SHINKI」というシートを探し、そのA1のセルに「2007年」と入力したいのです。
困っています。どうか宜しくお願いします。

Aベストアンサー

With Application.FileSearch
.LookIn = "C:\Documents and Settings\NAKAMURA\デスクトップ\KONKI"
.Filename = "*.xls"

If .Execute > 0 Then
For FileNo = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(FileNo)

intSC = ActiveWorkbook.Sheets.Count

For intNum = 1 To intSC

If Sheets(intNum).Name = "SHINKI" Then
Sheets(intNum).Cells(1,1) = "2007年"
End If
Next
Next
ActiveWorkbook.Close SaveChanges:=True
End If
End With

動作確認はしてませんので、動かないかもしれませんが
こんな感じで出来ると思います。

With Application.FileSearch
.LookIn = "C:\Documents and Settings\NAKAMURA\デスクトップ\KONKI"
.Filename = "*.xls"

If .Execute > 0 Then
For FileNo = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(FileNo)

intSC = ActiveWorkbook.Sheets.Count

For intNum = 1 To intSC

If Sheets(intNum).Name = "SHINKI" Then
...続きを読む


人気Q&Aランキング

おすすめ情報