Member 12823736 Ответов: 2

Visual studio C# создание каталога / копирование файлов


У меня есть фрагмент кода в моем приложении Visual Studio 2015 C#, который должен создать каталог в папке документов пользователя при запуске под названием " пользовательские файлы." Затем он должен скопировать 3 файла в этот каталог (перезаписав их, если они уже есть) UserFile1.kpt, UserFile2,kpt, UserFile3.kpt. Эти файлы будут находиться в том же каталоге, что и скомпилированная exe-программа. Я очень новичок в кодировании, поэтому не верю, что это правильно, но надеюсь, что я на правильном пути и могу получить некоторые рекомендации. Получение "приложения" не содержит определения для "StartupPath" и, возможно, создание каталога дважды.

Что я уже пробовал:

public static string DosesLocation
    {
        get
        {
            string myDocsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
            string dosesLocation = Path.Combine(myDocsPath, "User Files");
            Directory.CreateDirectory(dosesLocation);
            return dosesLocation;

            string target_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "User Files");
            Directory.CreateDirectory(target_path);

            foreach (var name in new[] { "UserFile1.kpt", "Userfile2.kpt", "Userfile3.kpt" })
            {
                string source_fill_path = Path.Combine(Application.StartupPath, name);
                string target_fill_path = Path.Combine(target_path, name);

                File.Copy(source_fill_path, target_fill_path, false);
            }

        }
    }


Думал, может быть, и так, но не знаю, как это реализовать.

string source_full_path = Path.Combine( Path.GetDirectoryName( Assembly.GetEntryAssembly().Location ), name );

Kornfeld Eliyahu Peter

Какое у вас здесь приложение?

Member 12823736

Visual Studio C# - просто нужно создать каталог с именем User Files в папке документов пользователя и переместить/перезаписать 3 файла (перечисленные в коде), которые находятся в папке скомпилированного exe.

Karthik_Mahalingam

Всегда использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

2 Ответов

Рейтинг:
2

Richard MacCutchan

У вас слишком много кода внутри вашего геттера. А также оператор return bang в середине, так что второй блок кода никогда не будет выполнен. DosesLocation является (предполагается) свойством, поэтому оно должно содержать set метод, который создает путь, и get это просто возвращает его. Другой код, который создает каталог и копирует файлы, должен находиться в отдельном методе вашего класса.

Что касается Вашего сообщения об ошибке, то вы забыли показать код, где оно происходит.


Member 12823736

Очень новичок в кодировании, поэтому имеет смысл, что есть эти ошибки. Не знаю, как исправить кодовый блок. Как вы уже сказали, каталог create, казалось, работал - просто не могу заставить файлы копирования работать. Ошибка заключается в следующем: приложение "не содержит определения для "StartupPath", я думаю, потому что оно не определено. Мне сказали, что, возможно, второй (string source full path) может помочь, но все же получить все это вместе.

Richard MacCutchan

Application.StartupPath он доступен в приложениях Windows Forms, поэтому я предполагаю, что это должно быть консольное приложение. См. документацию по адресу Приложение.Свойство StartupPath (System.Окна.Формы)[^].

Рейтинг:
0

OriginalGriff

Хм... это какой - то странный код- он даже не будет компилироваться, как все, что следует за строкой

return dosesLocation;
будет помечен как "недостижимый код".
Плюс ошибка компиляции приложения.StartupPath как
'Application' does not contain a definition for 'StartupPath'
Подразумевает, что у вас есть переменная или класс с именем Application, что означает, что вы пытаетесь получить доступ к неправильному статическому свойству.

Я подозреваю, что любые ошибки во время выполнения, которые вы получаете - например, попытка создать папку дважды - на самом деле происходят в предыдущей версии кода, который действительно компилировался, поскольку ошибки компиляции препятствуют созданию EXE-файла. Directory.CreateDirectory не волнует, если папка уже существует, она все равно будет работать.
Однако, File.Copy не позволит вам перезаписать существующий файл, если вы не используете версию перегрузки с тремя параметрами: Файл.Метод Копирования (String, String, Boolean) (System.IO)[^]


Member 12823736

Я уверен, что код очень странный - совершенно новый для этого и просто пытающийся победить одну задачу создания каталога / копирования файлов.

Думаю, вы правы - надо было коду просто создать рабочий каталог, так что, возможно, он был создан из рабочей сборки, а не из этого кода. 3 файла должны быть скопированы и перезаписаны, если есть (скопированы из исходной папки программ exe), как вы предлагаете.

Мне сказали, что я мог бы использовать что-то вроде:

строка source_full_path = путь.Комбинат( Путь.GetDirectoryName( Сборка.GetEntryAssembly ().Местоположение ), наименование );

Чтобы разрешить приложение, но, Но я думаю, что мой блок кода настолько искажен, что даже правильная строка кода не будет работать в нем.