Задача: Создать файл, записать строку.

Gor

Client
Регистрация
30.09.2016
Сообщения
250
Реакции
30
Баллы
28
Решение:
Код:
Развернуть Свернуть Копировать
string emailsErrorFileName = "errorTest";
string Path = project.Variables["emailsErrorFolderPath"].Value + @"\" + emailsErrorFileName + ".txt";
  
File.Create(Path);
Thread.Sleep(5000);
project.Lists["emailsError"].Bind(Path);
Thread.Sleep(5000);

project.Lists["emailsError"].Add("asdfsadf");

Настройки списка: http://prntscr.com/m4zpx1
Трабла: Файл создается, но строка не записывается.
Вопрос: Что за нах..?
 
попробуй без стоки
File.Create(Path);
ТАк:
Код:
Развернуть Свернуть Копировать
File.Create(@"C:\error.txt");
Thread.Sleep(5000);
project.Lists["emailsError"].Bind(@"C:\error.txt");
Thread.Sleep(5000);

project.Lists["emailsError"].Add("asdfsadf");

Или так?..
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";

File.Create(Path);
Thread.Sleep(5000);
project.Lists["emailsError"].Bind(Path);
Thread.Sleep(5000);

project.Lists["emailsError"].Add("asdfsadf");

В обоих случаях файл создается, в список в зенке добавляется строка, а реально в файле нет. Значит не биндится выходит.
 
Ну а ты можешь всё-таки попробовать без этой строки?
Да, попробовал. Файл создался.
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
File.Create(Path);
 
Да, попробовал. Файл создался.
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
File.Create(Path);
Ты меня троллишь? Ты можешь убрать эту строку "File.Create(Path);" из своего кода?
 
  • Спасибо
Реакции: Gor
убрал.
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";

project.Lists["emailsError"].Bind(Path);
Thread.Sleep(5000);
project.Lists["emailsError"].Add("asdfsadf");

Да, вижу, строка записалась.
Т.е. мы имеем отдельный код, который создает файл:
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
File.Create(Path);
и отдельный код, который биндит список к файлу и записывает строку:
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
project.Lists["emailsError"].Bind(Path);
Thread.Sleep(5000);
project.Lists["emailsError"].Add("asdfsadf");
Так почему они не работают вместе?
 
Работает только тогда, когда этот код разбить на два экшена, а между ними поставить паузу. Выходит код из 5 строк надо разбить на ТРИ экшена!
Снипет 1:
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
File.Create(Path);
ЭКШЕН ПАУЗЫ 2 СЕК.
Снипет 2:
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
project.Lists["emailsError"].Bind(Path);
project.Lists["emailsError"].Add("asdfsadf");

Правильно? Или есть нормальное какое-то решение?
 
Нашел нормальное решение. Аллилуйа!
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
if (!File.Exists(Path))
{
    using (StreamWriter sw = File.CreateText(Path))
    {
        sw.WriteLine("Hello");
    }
}
В предыдущих решениях, вероятно, могло быть нечто подобное:
"Выполнение действия CSharp OwnCode Процесс не может получить доступ к файлу "C:\error.txt", так как этот файл используется другим процессом."
Но это сообщение не выводилось в лог.
 
  • Спасибо
Реакции: Gor
Хрень... получилось как ты сказал... :bm: Только я пробовал раньше при уже созданном файле. У меня, ессно, строчка вписалась. Как-то не подумал, файл создается если его нет при привязке и записи файла. (facepalm)
Спасибо!
 
Итого, решение в конечно виде:
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
project.Lists["emailsError"].Bind(Path);
project.Lists["emailsError"].Add("asdfsadf");
 
Так а в чем дело-то было не могу понять? Почему нельзя сначала создать файл, а потом привязать список к нему и записать строку?
 
Так а в чем дело-то было не могу понять? Почему нельзя сначала создать файл, а потом привязать список к нему и записать строку?
вероятно
"Выполнение действия CSharp OwnCode Процесс не может получить доступ к файлу "C:\error.txt", так как этот файл используется другим процессом."
 
Как я сказал, такой надписи не было. Снипет выполнялся успешно, лог на меня не ругался.
Но если этот файл действительно использовался больше чем 1 процессом, то как завершить использование файла 1 процессом и начать использовать файл другим?
Мы выполняем действие над файлом с помощью метода File.Create, а потом биндим к нему список. Предположительно в процессе биндинга что-то идет не так.
Значит предполагается, что после создания ожидается запись или еще что-то, значит нужно завершить каким-то образом использование? Как?
 
Как я сказал, такой надписи не было. Снипет выполнялся успешно, лог на меня не ругался.
Но если этот файл действительно использовался больше чем 1 процессом, то как завершить использование файла 1 процессом и начать использовать файл другим?
Мы выполняем действие над файлом с помощью метода File.Create, а потом биндим к нему список. Предположительно в процессе биндинга что-то идет не так.
Значит предполагается, что после создания ожидается запись или еще что-то, значит нужно завершить каким-то образом использование? Как?
ты не поверишь
https://www.google.com/search?client=firefox-b-ab&q=file.create+c#+освободить
 
Да лааадно!! Шо серьезно??? И так можно было??
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
FileStream fs = File.Create(Path);
fs.Close();
project.Lists["emailsError"].Bind(Path);
project.Lists["emailsError"].Add("asdfsadf");
 
Да лааадно!! Шо серьезно??? И так можно было??
Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
FileStream fs = File.Create(Path);
fs.Close();
project.Lists["emailsError"].Bind(Path);
project.Lists["emailsError"].Add("asdfsadf");
если тебе нужен просто файл с текстом не как список, хватило бы и этого

Код:
Развернуть Свернуть Копировать
string Path = @"C:\error.txt";
File.WriteAllText(Path, "textext");
 
  • Спасибо
Реакции: Gor
да, можно было создать сначала файл, записать какой-то текст, а на следующих итерациях биндится к нему списком.
Ну фсё! Я теперь как Джанго освобожденный! Аж крылья прорезаются ))) Знаю как в файлы инфа сохраняется! )))))))
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)