12

Win7-PCで実行される小さなアプリを作成しました。午前1時にネットワークドライブの内容を確認し(ローカルハードドライブ上のフォルダと比較し)、違いがある場合は、このフォルダにコピーします。 。

問題は、ネットワークドライブが見つからない場合があることです。

アプリが起動すると、OpenFileDialogを起動するアプリのボタンを使用してネットワークドライブが検出され、結果のドライブ文字がボタンの横のテキストボックスに配置されます。その時点から、それはそれ自体で実行されるべきです。PCの電源がオフになることはありません。

ネットワークドライブが見つからないと表示されたら、同じアプリのボタンを手動で押して、OpenFileDialogでドライブを選択すると(ドライブ文字は変更されません)、アプリは数日で問題なく実行されます。その後、問題が再び発生します。

問題は、アプリのOpenFileDialogからネットワークドライブにアクセスできるのに、アプリにアクセスできないのはなぜですか。

私のアプリは、この関数( "Y:\"で呼び出されます)を使用してコピープロセスを開始し、ドライブが存在するかどうかを判断します。

    public bool fn_drive_exists(string par_string)
    {
        DirectoryInfo di_dir = new DirectoryInfo(par_string);
        if (di_dir.Exists)
        {
            return true;
        }

        return false;
    }

...そして、OpenFileDialogを使用して「ウェイクアップ」するまで、Falseを返すことがあります。

OpenFileDialogは何をしますか、私のアプリはしませんか?

4

5 に答える 5

1

このSO postによると、マップされたネットワーク ドライブの代わりに UNC パスを使用すると、問題は解決するはずです。

于 2012-07-07T19:34:15.737 に答える
0

使用することもできます:

System.IO.Directory.Exists(par_string);

同じことのためにあなた自身の方法を書く代わりに。フレームワークメソッドがネットワークドライブを「目覚めさせる」ことができると期待しています。注: メソッドは UNC パス (のようなもの\\<server name or IP address>\<shared folder>)でも機能します。

于 2012-08-15T20:35:15.140 に答える
0

宛先に静的 IP アドレスがある場合は、ネットワーク ドライブのドメイン名の代わりにその IP アドレスを使用することをお勧めします

于 2012-07-23T03:51:09.140 に答える
0

この SO 投稿では、あなたが説明したものと同様のシナリオについて説明しています。

その質問への回答として投稿されたリンクの 1 つから、マップされたドライブ文字を使用して共有ネットワーク ドライブにアクセスしようとしたときにエラーが発生する理由について、さまざまな理由を説明しているこの MSDN 記事にたどり着きました。

Microsoft の提案 (以下を参照) は、単純に UNC パスを使用することです。

リモート リソースにアクセスする必要があるサービス (ま​​たは別のセキュリティ コンテキストで実行されているプロセス) は、Universal Naming Convention (UNC) 名を使用してリソースにアクセスする必要があります。

実際の質問に具体的に答えるために、ネットワーク共有に突然アクセスできなくなった理由については、KB297684で説明されているように、ネットワーク共有がアイドル タイムアウトのために Windows によって切断されていると推測します。切断されたドライブにアクセスしようとすると、ネットワーク共有への接続が再確立されるため、少し待機します。これが問題の原因である可能性があります。

この理論を検証するには、比較的短い間隔 (おそらく 10 分ごと?) でネットワーク ドライブ上のファイルにデータを書き込んで、ドライブがまだアクティブであることを Windows に認識させてみてください。

于 2012-08-11T06:01:33.193 に答える
0

Harvey が言うように、\\server\sharedfolder などの UNC パスを使用してフォルダーにアクセスします。\\server の代わりに、サーバーの名前を使用します。コンピューターには名前があり、サーバーにも名前があります。わかっている場合は、IP アドレスを使用することもできます。\sharedfolder をファイルへのパスに置き換えます。いくつかの例:

\\AppsServer\c$\Program Files(x86)

\\FileServer1\d$\Users\John\My Documents

c$ は、C ドライブが共有フォルダーであることを表します。ドライブ全体が共有されていない場合は、特定のフォルダーを共有する必要があります。これを行うには、サーバーにログオンし、フォルダーを右クリックして [プロパティ] を選択します。次に、[共有] タブに移動し、[このフォルダーを共有する] チェックボックスをオンにします。共有フォルダーが MyShare という名前の場合、フォルダーにアクセスするための UNC パスは次のようになります。

\\server\MyShare

于 2012-09-15T00:28:11.737 に答える