2016-09-06 1 views
0

Здравствуйте, я пытаюсь создать папку каталога с текстовым документом для моего исполняемого файла приложения Windows. Теперь я должен сделать его доступным локально для других пользователей.избежать перезаписи файла и содержимого с каждым прогоном или запросом с исполняемым каталогом

Я делаю это так:

string dir = "%ProgramData%\\MyAppName\\doc.txt"; 
     if (!Directory.Exists(dir)) 
     { 
      Directory.CreateDirectory(Path.GetDirectoryName(dir)); 
      var stream = File.CreateText(dir);    
      stream.Close(); 
     } 

и вот мой путь доступа из исполняемого каталога внутри кода:

const string mypath = (@"%ProgramData%\MyAppName\doc.txt"); 

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

if (File.Exists(mypath)) 
       wordsTyped.AddRange(File.ReadAllLines(mypath)); 

и отлично работает с локальным путем к папке отладки, как это:

const string tetdb = ("doc.txt"); 

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

но должен быть следующим: если папка создается один раз, если каталог, файл, документ существует, нет нетто с кодом исполняемого файла или нажмите клавишу ввода, или он уже был там. сохранять содержимое внутри текстового документа с каждым запуском программы или запрашивать его добавления к нему.

Я попытался создать только папку для исполняемого пути, чтобы создать текстовый документ отдельно, как показано выше, но я получил тот же результат. Итак, как избежать этой проблемы, что я делаю неправильно?

+2

'«% ProgramData% \\ MyAppName \\ Doc.txt»;' это имя файла не реж имя. Таким образом, 'Directory.Exists (dir)' всегда будет терпеть неудачу ... (Сравните его с 'File.Exists') –

+1

Код в сообщении не имеет смысла - зачем создавать папку и сразу же пытаться открыть ее как текстовый файл? Пожалуйста, отправьте код, который по крайней мере выглядит разумным. Замечание: в обычной системе, где пользователи не имеют прав администратора, ваш код не сможет вообще записывать в папку данных приложения –

ответ

0

Тест на !Directory.Exists является причиной вашей проблемы.
Вы передаете имя файла методу, поэтому метод возвращает false (каталог с этим именем не существует). Это означает, что вы всегда ввести, если и вызов File.Create поверх существующего файла перезаписать содержимое файла

string file = "%ProgramData%\\MyAppName\\doc.txt"; 
if (!Directory.Exists(Path.GetDirectoryName(file))) 
{ 
    .... 
} 
Смежные вопросы