Как сделать символические ссылки в Visual Studio (Window Forms)C#

Место общения программистов C#
Ответить
Anonymous
 Как сделать символические ссылки в Visual Studio (Window Forms)

Сообщение Anonymous »

Я новичок в использовании сообщества Visual Studio 2022 и кодировании на C#, а также пытаюсь разработать приложение Windows Form для монтирования и отключения символических ссылок в зависимости от их статуса монтирования\размонтирования. Я добавил пространство имен «System.IO». То, что я пытаюсь сделать в пакетном режиме, будет выглядеть так:

Код: Выделить всё

    set dest=\\path\to\share\pub
set dest="%dest%"
for %%i in (%dest%) do (set "fold=%%~ni")
if exist "c:\VOLUMES\%fold%" (goto:unmount) else (goto:mount)

:unmount
RD "c:\VOLUMES\%fold%"
net use %dest% /delete
pause
goto:eof

:mount
if not exist "C:\Volumes" MD "C:\Volumes"
mklink /d "c:\VOLUMES\%fold%" "%dest%"
net use %dest%
pause
goto:eof
Пока у меня не так много. При попытке изолировать имя папки я сталкиваюсь с проблемами

Код: Выделить всё

private void ChangeLinkListBox(object sender, EventArgs e)
{
//Take path as string works
SymLinkSelect.Text = SymLinkList.SelectedItem.ToString();
//Only take final folder as string
//SymLinkFolder.Text = SymLinkList.SelectedItem.Path();
//SymLinkFolder.Text = SymLinkList.SelectedItem.ToPath();
//SymLinkFolder.Text = SymLinkList.SelectedItem.ToString();
//SymLinkFolder.Text = new DirectoryInfo(SymLinkList.SelectedItem.ToString()).Name;
}
Многое из того, что я нахожу в Интернете, посвящено созданию символических ссылок для Visual Studio, на которые можно ссылаться как на программу, а не созданию их изнутри программы. Я сделал кнопку, которая в идеале будет монтировать/размонтировать путь, выбранный в списке путей

Код: Выделить всё

private void MountShare(object sender, EventArgs e)
//Mount/Unmount symlinks here button change, check for mounts?
{
if (btnPos == false)
{
if (SymLinkSelect.Text.Length > 0)
{
btnPos = true;
//mounting script in here
//DoProcess("Net") - does not exist in the current context
//pass string to batch file?
btnMount.Text = "Unmount";
}
else
{
MessageBox.Show("Select a Link to Mount please", "SymLink Says: ");
}
}
else
{
btnMount.Text = "Mount";
//unmounting script in here
btnPos = false;
}
}
Я нашел это, но каждый раз, когда я пытаюсь включить его в свой код, это ломает все, даже просто добавляя [DllImport("kernel32.dll")] в общедоступном виде. частичный класс Form1: раздел Form нарушает его.

Код: Выделить всё

namespace ConsoleApplication
{
class Program
{
[DllImport("kernel32.dll")]
static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, SymbolicLink dwFlags);

enum SymbolicLink
{
File = 0,
Directory = 1
}

static void Main(string[] args)
{
string symbolicLink = @"c:\bar.txt";
string fileName = @"c:\temp\foo.txt";

using (var writer = File.CreateText(fileName))
{
writer.WriteLine("Hello World");
}

CreateSymbolicLink(symbolicLink, fileName, SymbolicLink.File);
}
}
}
Я знаю, что откусил больше, чем могу выдержать, поэтому прошу прощения за то, что не знаю, о чем на самом деле просить и как спрашивать, но я чувствую, что было бы полезно научиться таким образом. Вот как приложение выглядит сейчас, на случай, если оно чем-нибудь поможет
Изображение

Спасибо за помощь и извините за все вопросы.

Рори

Подробнее здесь: https://stackoverflow.com/questions/792 ... ndow-forms
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»