Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Удаление строка из файла ?


Автор: jxr 2.11.2005, 22:35
file=File.OpenWrite("c:\\x.txt");
StreamWrite filestrm=StreamWrite(file);

хотелось удалить какую то (определенный) строку из файла !
я искаль нооо ! помогите.

Автор: mr.DUDA 4.11.2005, 10:13
Читаем весь файл в string, бъём Split-ом по "\n" (или что там в файле разделителем строк), удаляем из массива строку с нужным индексом, соединяем в один стринг Join-ом, сохраняем в файл.

Автор: jxr 5.11.2005, 06:14
Конструктор FileStream Exception.
"Access to the path "c:\inetpub\wwwroot\AspProg\servers.txt" is denied. "
Как использавать эти конструкторы FileStream class?
c:\inetpub\wwwroot\AspProg\servers.txt -- path\file сушестьвуеть !
ASP.NET project.
private void Page_Load(....)
{
...............................
absolutePathToFile = this.Server.MapPath("servers.txt");
file=new FileStream(absolutePathToFile,FileMode.Open);
................................
}

Автор: mr.DUDA 5.11.2005, 20:17
Попробуй указать в конструкторе FileAccess.Read, иначе если файл read-only - конструктор свалится именно с таким исключением.

Автор: jxr 5.11.2005, 22:04
Exception нет уже ! НО ...
Я могу записать в файл ? Незаписываеться ! ниже код:
Код

                file=new FileStream(absolutePathToFile,FileMode.Open,FileAccess.Read);
                .......................................................                file=File.OpenWrite(absolutePathToFile);//эта может не быть ?
    filewrite=new StreamWriter(file);
    filewrite.Write(text);

что та не то ?
И StreamReader, и StreamWriter может работать с одним FileStream-ом ?
Если у него в конструктре есть FileAccess.Read, это возможна записать(append) ?
Меня кажеться очень сложна введены классы Файл и Стреамы !
не так ли, Спосибо !

Автор: bend0r 6.11.2005, 00:19
можно так
Код

FileStream file = new FileStream("file.txt", FileMode.Open, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(file);
string str = "TEST!!  TEST!!!";
sw.Write(str);

FileStream file2 = new FileStream("file.txt", FileMode.Open, FileAccess.ReadWrite);
StreamReader  sr = new StreamReader(file2);
string str2;
str2 = sr.ReadLine();

file.Close();
Console.WriteLine(str2);


а можно так

Код

StreamWriter sw = new StreamWriter("file.txt");
string str = "TEST!!  TEST!!!";
sw.Write(str);
sw.Close();

StreamReader  sr = new StreamReader("file.txt");
string str2;
str2 = sr.ReadLine();
sr.Close();
Console.WriteLine(str2);





Цитата(jxr @ 5.11.2005, 22:04)
И StreamReader, и StreamWriter может работать с одним FileStream-ом ?


может.

Автор: bend0r 6.11.2005, 02:13
можно вот так удалять.

Код

StreamReader  sr = new StreamReader("file.txt");

string str;
int i = 0; // индекс элемента массива который надо удалить.
ArrayList al = new ArrayList();

while( (str = sr.ReadLine()) != null)
    al.Add(str);
sr.Close();

al.RemoveAt(i);

StreamWriter sw = new StreamWriter("file.txt");

foreach(string s in al)
sw.WriteLine(s);

sw.Close();



Автор: jxr 6.11.2005, 12:54
Ничего не записаваеться в файл c:\xxx.txt
Если удалить файл c:\xxx.txt то при впольнение програмы
создаеться файл c:\xxx.txt ! Но в нем ничего ничего незаписано !
Почему ? Где Ошибка(и)? Для меня самый сложный часть = Files and Streams. Это что такое ... smile Помогите !
Код

using System;
using System.IO;

namespace ConApp1
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            string str="Hello, World - I can not write to file.";
            StreamWriter sw=new StreamWriter("c:\\xxx.txt");
            sw.WriteLine(str);
        }
    }
}

Автор: bend0r 6.11.2005, 13:46
потоки надо закрывать, добавь
Код

sw.Close();



Автор: jxr 6.11.2005, 23:56
Незаписиваеться !? а уж потом поток закрывать можна !
не долыжна была записаваеться все равно !
Но Записал ! Спосибо ! но в чем была проблема ? Close() так важно ?

Автор: bend0r 7.11.2005, 00:34
Код

sw.Flush();


этот метод записывает содержимое потока в физическое устройство, можно использовать его,возможно даже нужно. как я понимаю при закрытие он всёравно вызывается.
но закрывать всёравно надо smile

я C# изучал по книге Шилдтета он в своих примера Flush не использовал, поэтому я привык тож сразу закрывать.

Автор: jxr 7.11.2005, 01:48
А как добавить новая строка с
StreamWriter sw=new StreamWriter("c:\\xxx.txt");


Автор: bend0r 7.11.2005, 02:26
открывает существующий файл, а не создает новый, если ты про это
Код

StreamWriter sw=new StreamWriter("c:\\xxx.txt", true);


вот тут все это есть:
http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/cpref/html/frlrfSystemIOStreamWriterClassctorTopic.asp

Автор: jxr 7.11.2005, 02:59
Спосибо !
знаешь какая либо ссылка только по С шарп - Файл-Стреам.
самый сложно для меня ! Read,ReadWrite,Write -- Open ,OpenorCreate, Create ........
FileStream constructor arguments !!!FileMode and FileAccess !

Автор: jxr 7.11.2005, 04:00
Код


                absolutePathToFile = this.Server.MapPath("ip.txt");

                .........................................................
    filewrite=new StreamWriter(absolutePathToFile,true);        filewrite.Write("Hello,World");
                filewrite.Flush();// bez etoqo toje.
                filewrite.Close();
                ..........................................................



Это ASP.NET program.
absolutePathToFile = вы знаете !? "виртуальный путь в запрошенном URL в физический путь в сервере для текущего запроса."
Не записавает ничего в файл "ip.txt" ! Почему ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)