Каким образом можно получить доступ к папке(для подсчета количества файлов). Если папке находиться по следующему адресу: \\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. Но как его юзать в данном случае я никак себе не представляю
Здравствуйте, 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. Но как его юзать в данном случае я никак себе не представляю
Здравствуйте, 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. Но как его юзать в данном случае я никак себе не представляю
Здравствуйте, 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;
//дальше вышеприведённый код. всё должно работать