Давайте рассмотрим его.
a
имеет тип int [4]
(массив из 4 int). Его размер 4 * sizeof(int)
.
&a
имеет тип int (*)[4]
(указатель на массив из 4 int).
(&a + 1)
также имеет тип int (*)[4]
. Он указывает на массив из 4 int, который начинает 1 * sizeof(a)
байт (или 4 * sizeof(int)
байт) после начала a
.
*(&a + 1)
имеет тип int [4]
(массив 4 int). Его память начинает 1 * sizeof(a)
байт (или 4 * sizeof(int)
байт после начала a
.
*(&a + 1) - 1
имеет тип int *
(указатель на int), потому что массив *(&a + 1)
уменьшается до указатель на его первый элемент в этом выражении. Он будет указывать на int, который начинает 1 * sizeof(int)
байт до начала *(&a + 1)
. Это то же значение указателя, что и &a[3]
.
*(*(&a + 1) - 1)
типа int
. Поскольку *(&a + 1) - 1
- это то же значение указателя, что и &a[3]
, *(*(&a + 1) - 1)
эквивалентно a[3]
, который был инициализирован как 3
, так что это число, напечатанное printf
.
Это потому, что длина пути к файлу превышает 255 символов.
Попробуйте заменить
pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName;
на
pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);
FileInfo обеспечивает доступ к файловой системе, и я предполагаю, что только администратор имеет доступ к этому каталогу. Если это не решит вашу проблему, по крайней мере, это немного ускорит ваш код ...
Является ли каталог сопоставленной домашней папкой вошедшего в систему пользователя или ниже? Эта статья базы знаний может помочь:
Обновление: Обратите внимание, что будучи членом Группа локальных администраторов и обладание административными привилегиями не совпадают в Vista.
Я полагаю, что все работает нормально, когда вы запускаете приложение C # от имени администратора. Щелкните исполняемый файл правой кнопкой мыши, затем выберите Запуск от имени администратора или запустите приложение из командной строки с повышенными привилегиями (самый быстрый способ получить его - нажать Пуск , ввести «cmd», а затем by Ctrl + Shift + Return
).
Или, в качестве альтернативы,