0

フォルダーを監視するためのasp.net c# filewatcherプログラムを開発しました。

変更されたファイルまたは新しく作成されたファイルがある場合、プログラムはそれらのファイルを別のウィンドウ サーバー共有フォルダー (例: \192.168.12.12\shared) にコピーします。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Net;
using System.Globalization;
using System.Text.RegularExpressions;

namespace FileMonitor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            fileWatcher.Path = @txtPath.Text;
            fileWatcher.Filter = txtFilter.Text;
            fileWatcher.IncludeSubdirectories = chkSubdirectories.Checked;
        }

        DateTime lastRead = DateTime.MinValue;

        private void fileWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)
        {
            DateTime lastWriteTime = File.GetLastWriteTime(e.FullPath); 

            if (lastWriteTime != lastRead)
            {


                txtLog.Text += e.ChangeType + ": " + e.FullPath + "\r\n";
                txtLog.Focus();
                txtLog.Select(txtLog.TextLength, 0);
                txtLog.ScrollToCaret();

                try
                {
                    string myPath = e.FullPath;
                    string myFile = e.Name;

                    System.IO.FileInfo myFileInfo = new System.IO.FileInfo(myFile);

                    string myAttibs = myFileInfo.Attributes.ToString();

                    System.IO.File.Copy(myPath, @"\\192.168.12.12\\shared\\" + myFile, true);

                    lastRead = lastWriteTime; 

                }
                catch (System.IO.IOException ex)
                {
                    System.IO.IOException myex = ex;
                }
                catch (System.Exception ex)
                {
                    System.Exception myex = ex;
                }

            }
        }

        private void fileWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            DateTime lastWriteTime = File.GetLastWriteTime(e.FullPath);

            if (lastWriteTime != lastRead)
            {


                txtLog.Text += e.ChangeType + ": " + e.FullPath + "\r\n";
                txtLog.Focus();
                txtLog.Select(txtLog.TextLength, 0);
                txtLog.ScrollToCaret();

                try
                {
                    string myPath = e.FullPath;
                    string myFile = e.Name;

                    System.IO.FileInfo myFileInfo = new System.IO.FileInfo(myFile);

                    string myAttibs = myFileInfo.Attributes.ToString();

                    System.IO.File.Copy(myPath, @"\\192.168.12.12\\shared\\" + myFile, true);

                    lastRead = lastWriteTime;

                }
                catch (System.IO.IOException ex)
                {
                    System.IO.IOException myex = ex;
                }
                catch (System.Exception ex)
                {
                    System.Exception myex = ex;
                }

            }
        }

    }
}

しかし、filewatcher プログラムを実行する前に、一度共有フォルダーにアクセスする必要があることがわかりました (ウィンドウ エクスプローラーで \192.168.12.12\shared と入力すると、ログイン名とパスワードを入力するように求められます)。共有フォルダ。

共有フォルダにアクセスできるように、このログイン名とパスワードをプログラムに渡すにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

これを行う通常の方法は、このタイプのコピー コードを実行しているユーザーに、共有フォルダーで必要な権限を与えることです。

これができない場合は、Win32 関数のNetUseAddまたはWNetAddConnection2を使用して共有を認証する必要があります (リンクは、C# でこれらの関数を使用する方法を示す pinvoke.net を指しています)。

于 2012-05-01T12:46:28.260 に答える