I write application which continously reads and rewrites files (this program converts web links in htm files to local links, because I want use this files offline). When I wrote procedure:

// index.htm
FileName = (string)kolekcjaPlikow.GetValue(0);

StreamReader myStreamReader = null;
myStreamReader = File.OpenText(FileName);

bufor = myStreamReader.ReadToEnd();
myReadBufor = bufor;

myStreamReader.Close(); (2)

StreamWriter myStreamWriter = null;
myStreamWriter = File.CreateText(FileName); (1)

I get error:
The process cannot access the file 'index.htm' in line (1) because it is being used by another process.

I cannot understand this: why myStreamReader.Close() in line (2) will not release the handle? Is there any possibility release this handle?

Recommended Answers

All 4 Replies

You don't have to do this StreamWriter myStreamWriter = null;
Try using this syntax :

using ( StreamWriter myStreamWriter = File.CreateText(FileName) )
{

}

That way you can forget Close, Dispose etc. C# will take care of it.

And btw. if you close an existing file, why do you want to create it afterwards?

Because all files which I wan't to rewrite belong to one big htm portal when one file depends from another. In this files we may find hyperlinks like eg:

<a href="http://dal.functionx.com/vcsharp/applications/algebra.htm">

which I must turn into

<a href="applications/algebra.htm">.

Besides this html pages contains graphics, scripts which I don't want move anywhere.

I assume that into bracket from

using ( StreamWriter myStreamWriter = File.CreateText(FileName) )
{

}

I put whole procedure which was after StreamWriter myStreamWriter = null;. Am I correct?

I assume that in this same way I may rewrite procedure StreamReader.

I put whole procedure which was after StreamWriter myStreamWriter = null;. Am I correct?

I assume that in this same way I may rewrite procedure StreamReader.

You are correct.
But if you create new files use not the same filename you already used.

Don't worry. First I collect all filenames from saved htm portal pages into one big Array (for me as very beginner in C# programming is the eaziest way to collect all filenames) and later using "for" (I know number collected files) I read in sequence each filename, rearrange all necessary path in edited htm, rewrite it and get next on the list until I reach the end of the list.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.