Может ли мой код вызвать сбой при создании нового файла и каталога в Windows 7? - PullRequest
3 голосов
/ 14 января 2012

Ранее у меня были некоторые проблемы, которые вызывали сбой моей программы во всех ОС Windows, потому что я не создал новый файл / каталог для моего файла. Затем я заверил, что создал файл / папку перед инициализацией ect. Теперь моя программа работает в Windows XP, но не работает в Windows 7. Говоря, что она работает, я имею в виду, что она создает файл / папку, необходимые для моей программы. Не работая, я имею в виду, что файл / папка не создается в Windows 7.

Может ли этот код быть причиной сбоя в Windows 7? Если так, как я мог это исправить?

    private static string dir = Environment.GetFolderPath
        (Environment.SpecialFolder.ProgramFiles) + @"\folder\";
    private static string file = dir + @"\Settings.txt";
    private string text;

    public void CheckFileStatus()
    {
        if (!Directory.Exists(dir))
        {
            DirectoryInfo directory = Directory.CreateDirectory(dir);
        }
        if (!File.Exists(file))
        {
            using (FileStream fileStream = File.Create(file))
            {
            }
        }
    }

Ответы [ 2 ]

6 голосов
/ 14 января 2012

Каталог программных файлов в Windows 7 может быть записан только с повышенными привилегиями. Вы используете свой код как администратор? Плохо также писать в папку с файлами программы. Вы должны использовать папку% appdata%.

Взгляните здесь , чтобы увидеть различные специальные папки. Вы, вероятно, захотите использовать либо System.Environment.SpecialFolder.ApplicationData, либо System.Environment.SpecialFolder.CommonApplicationData. Это позволит вам записывать данные без необходимости повышенных привилегий.

3 голосов
/ 14 января 2012

Вы не можете создавать папки в программных файлах, не имея повышенных привилегий (т.е. выступая в качестве администратора) в Windows Vista и Windows 7. Как правило, есть лучшие места для размещения файлов настроек, которые должны быть доступны для записи любому пользователю.

Environment.SpecialFolder.ApplicationData или Environment.SpecialFolder.LocalApplicationData - это, как правило, место для пользовательских данных приложения, что, скорее всего, то, что вы хотите.

Разница в том, что в домене ApplicationData будет размещен в вашем роуминговом профиле и будет использоваться всеми компьютерами в домене, тогда как LocalApplicationData только для этой машины.

Для домашних пользователей или если вы специально не хотите, чтобы данные распределялись между компьютерами, возможно, LocalApplicationData лучше. Таким образом, вы знаете, что это не вызовет проблем в домене, если вы в конечном итоге будете записывать в него данные, специфичные для компьютера.

Существует также Environment.SpecialFolder.CommonApplicationData, который позволяет обмениваться одними и теми же данными между всеми пользователями на компьютере, но, хотя это может показаться удобным, учтите, что любой пользователь на машине может затем изменить настройки программы, которую вы позже запускаете. что может привести к последствиям для безопасности.

...