Небходимо сделать
От: 16alex  
Дата: 29.01.09 08:53
Оценка:
Каким образом можно получить доступ к папке(для подсчета количества файлов). Если папке находиться по следующему адресу: \\vpn-ip-ник\D$\folder\
Данный код позволяет получить количество файлов но только после того как я пройдусь по всем ip-никам и введу пароль и логин локального админа.

listBox2.Items.Clear();
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    string path = Properties.Settings.Default.path[i];

                    try
                    {
                        DirectoryInfo currDirectory = new DirectoryInfo(path);
                        if (currDirectory.Exists)
                        {
                            FileInfo[] a = currDirectory.GetFiles();
                            listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + a.Length.ToString());
                            //         MessageBox.Show(currDirectory.FullName);

                        }
                        else
                        {
                            listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + "Директории не существует");
               
                        }
                        //template-----------------------------------------------
                    }
                    catch
                    {
                        listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + "Нет доступа");
                    }
                    
                }
                MessageBox.Show("Проверка завершена,поздравляем");

Как автоматизировать этот процесс? Вроде бы есть NetworkCredential. Но как его юзать в данном случае я никак себе не представляю
Re: Доступ к папке по сети
От: 16alex  
Дата: 29.01.09 08:59
Оценка:
Здравствуйте, 16alex, Вы писали:

1>Каким образом можно получить доступ к папке(для подсчета количества файлов). Если папке находиться по следующему адресу: \\vpn-ip-ник\D$\folder\

1>Данный код позволяет получить количество файлов но только после того как я пройдусь по всем ip-никам и введу пароль и логин локального админа.

1>
1>listBox2.Items.Clear();
1>                for (int i = 0; i < listBox1.Items.Count; i++)
1>                {
1>                    string path = Properties.Settings.Default.path[i];

1>                    try
1>                    {
1>                        DirectoryInfo currDirectory = new DirectoryInfo(path);
1>                        if (currDirectory.Exists)
1>                        {
1>                            FileInfo[] a = currDirectory.GetFiles();
1>                            listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + a.Length.ToString());
1>                            //         MessageBox.Show(currDirectory.FullName);

1>                        }
1>                        else
1>                        {
1>                            listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + "Директории не существует");
               
1>                        }
1>                        //template-----------------------------------------------
1>                    }
1>                    catch
1>                    {
1>                        listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + "Нет доступа");
1>                    }
                    
1>                }
1>                MessageBox.Show("Проверка завершена,поздравляем");
1>

1>Как автоматизировать этот процесс? Вроде бы есть NetworkCredential. Но как его юзать в данном случае я никак себе не представляю
Re[2]: Доступ к папке по сети
От: avs99 Южная Корея  
Дата: 29.01.09 14:23
Оценка:
Здравствуйте, 16alex, Вы писали:

1>Здравствуйте, 16alex, Вы писали:


1>>Каким образом можно получить доступ к папке(для подсчета количества файлов). Если папке находиться по следующему адресу: \\vpn-ip-ник\D$\folder\

1>>Данный код позволяет получить количество файлов но только после того как я пройдусь по всем ip-никам и введу пароль и логин локального админа.

Как получить доступ к сетевой папке — попробуйте вот так:


    m_remotePath = @"\\vpn-ip-ник\D$\folder";   // еще можно попробовать folder отрезать
    WNetWrapper.NETRESOURCEW resource = new WNetWrapper.NETRESOURCEW();
    resource.dwType = WNetWrapper.RESOURCETYPE_DISK;
    resource.lpLocalName = null;
    resource.lpRemoteName = m_remotePath;
    resource.lpProvider = null;
    uint res = WNetWrapper.WNetAddConnection2W(ref resource,
                                                         YOUR_Password,
                                                         YOUR_UserName,
                                                         0);
    if (res != 0)
        throw new Win32Exception((int) res);


где враппер такой:


    internal static class WNetWrapper
    {
        /// RESOURCETYPE_DISK -> 0x00000001
        public const int RESOURCETYPE_DISK = 1;

        /// Return Type: DWORD->unsigned int
        ///lpNetResource: LPNETRESOURCEW->_NETRESOURCEW*
        ///lpPassword: LPCWSTR->WCHAR*
        ///lpUserName: LPCWSTR->WCHAR*
        ///dwFlags: DWORD->unsigned int
        [DllImport("mpr.dll", EntryPoint = "WNetAddConnection2W")]
        public static extern uint WNetAddConnection2W(ref NETRESOURCEW lpNetResource,
                                                      [In] [MarshalAs(UnmanagedType.LPWStr)] string lpPassword,
                                                      [In] [MarshalAs(UnmanagedType.LPWStr)] string lpUserName,
                                                      uint dwFlags);

        /// Return Type: DWORD->unsigned int
        ///lpName: LPCWSTR->WCHAR*
        ///dwFlags: DWORD->unsigned int
        ///fForce: BOOL->int
        [DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2W")]
        public static extern uint WNetCancelConnection2W([In] [MarshalAs(UnmanagedType.LPWStr)] string lpName,
                                                         uint dwFlags, [MarshalAs(UnmanagedType.Bool)] bool fForce);

        #region Nested type: NETRESOURCEW

        [StructLayout(LayoutKind.Sequential)]
        public struct NETRESOURCEW
        {
            /// DWORD->unsigned int
            public uint dwScope;

            /// DWORD->unsigned int
            public uint dwType;

            /// DWORD->unsigned int
            public uint dwDisplayType;

            /// DWORD->unsigned int
            public uint dwUsage;

            /// LPWSTR->WCHAR*
            [MarshalAs(UnmanagedType.LPWStr)]
            public string lpLocalName;

            /// LPWSTR->WCHAR*
            [MarshalAs(UnmanagedType.LPWStr)]
            public string lpRemoteName;

            /// LPWSTR->WCHAR*
            [MarshalAs(UnmanagedType.LPWStr)]
            public string lpComment;

            /// LPWSTR->WCHAR*
            [MarshalAs(UnmanagedType.LPWStr)]
            public string lpProvider;
        }

        #endregion
    }



Алексей.


1>>
1>>listBox2.Items.Clear();
1>>                for (int i = 0; i < listBox1.Items.Count; i++)
1>>                {
1>>                    string path = Properties.Settings.Default.path[i];

1>>                    try
1>>                    {
1>>                        DirectoryInfo currDirectory = new DirectoryInfo(path);
1>>                        if (currDirectory.Exists)
1>>                        {
1>>                            FileInfo[] a = currDirectory.GetFiles();
1>>                            listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + a.Length.ToString());
1>>                            //         MessageBox.Show(currDirectory.FullName);

1>>                        }
1>>                        else
1>>                        {
1>>                            listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + "Директории не существует");
               
1>>                        }
1>>                        //template-----------------------------------------------
1>>                    }
1>>                    catch
1>>                    {
1>>                        listBox2.Items.Add(listBox1.Items[i].ToString() + "-" + "Нет доступа");
1>>                    }
                    
1>>                }
1>>                MessageBox.Show("Проверка завершена,поздравляем");
1>>

1>>Как автоматизировать этот процесс? Вроде бы есть NetworkCredential. Но как его юзать в данном случае я никак себе не представляю
Re[3]: Доступ к папке по сети
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.09 17:23
Оценка:
Здравствуйте, avs99, Вы писали:

A>
A>    m_remotePath = @"\\vpn-ip-ник\D$\folder";   // еще можно попробовать folder отрезать
A>    WNetWrapper.NETRESOURCEW resource = new WNetWrapper.NETRESOURCEW();
A>    resource.dwType = WNetWrapper.RESOURCETYPE_DISK;
A>    resource.lpLocalName = null;
A>    resource.lpRemoteName = m_remotePath;
A>    resource.lpProvider = null;
A>    uint res = WNetWrapper.WNetAddConnection2W(ref resource,
A>                                                         YOUR_Password,
A>                                                         YOUR_UserName,
A>                                                         0);
A>    if (res != 0)
A>        throw new Win32Exception((int) res);

A>


Не можно, а нужно.
// select "\\server-name\share-name" string from the provided path. Required for WNetAddConnection2
private static readonly Regex m_remoteResourceName = new Regex(@"^(\\\\[^\\]+\\[^\\]+)\\", RegexOptions.Compiled);
/////////////////////////////////////
var match = m_remoteResourceName.Match(m_remotePath);
if (match == Match.Empty)
{
    //add proper handling
    return;
}

m_remotePath = match.Groups[1].Value;
//дальше вышеприведённый код. всё должно работать
[КУ] оккупировала армия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.