File being used by another process after using File.Create()
I'm trying to detect if a file exists at runtime, if not, create it. However I'm getting this error when I try to write to it:
The process cannot access the file 'myfile.ext' because it is being used by another process.
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Any ideas on how to fix it?
c# file-io
add a comment |
I'm trying to detect if a file exists at runtime, if not, create it. However I'm getting this error when I try to write to it:
The process cannot access the file 'myfile.ext' because it is being used by another process.
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Any ideas on how to fix it?
c# file-io
add a comment |
I'm trying to detect if a file exists at runtime, if not, create it. However I'm getting this error when I try to write to it:
The process cannot access the file 'myfile.ext' because it is being used by another process.
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Any ideas on how to fix it?
c# file-io
I'm trying to detect if a file exists at runtime, if not, create it. However I'm getting this error when I try to write to it:
The process cannot access the file 'myfile.ext' because it is being used by another process.
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Any ideas on how to fix it?
c# file-io
c# file-io
edited Jun 17 '14 at 7:19
bluish
13.9k1693147
13.9k1693147
asked May 6 '10 at 13:15
BrettBrett
82321224
82321224
add a comment |
add a comment |
10 Answers
10
active
oldest
votes
The File.Create
method creates the file and opens a FileStream
on the file. So your file is already open. You don't really need the file.Create method at all:
string filePath = @"c:somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
The boolean in the StreamWriter
constructor will cause the contents to be appended if the file exists.
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
@AnmolRathod go sure that you don't useFile.Create()
method! The snippet above already creates the file!
– Daniel Eisenreich
Aug 15 '18 at 13:25
add a comment |
File.Create(FilePath).Close();
File.WriteAllText(FileText);
I want to update this answer to say that this is not really the most efficient way to write all text. You should only use this code if you need something quick and dirty.
I was a young programmer when I answered this question, and back then I thought I was some kind of genius for coming up with this answer.
3
this was useful.
– Siva
Oct 1 '11 at 16:03
4
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
13
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
2
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
1
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use theFileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.
– reirab
Apr 13 '16 at 14:23
|
show 7 more comments
When creating a text file you can use the following code:
System.IO.File.WriteAllText("c:test.txt", "all of your content here");
Using the code from your comment. The file(stream) you created must be closed. File.Create return the filestream to the just created file.:
string filePath = "filepath here";
if (!System.IO.File.Exists(filePath))
{
System.IO.FileStream f = System.IO.File.Create(filePath);
f.Close();
}
using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath))
{
//write my text
}
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
File.Create
returnsFileStream
and that hasClose()
– Null Head
Sep 7 '15 at 20:49
add a comment |
FileStream fs= File.Create(ConfigurationManager.AppSettings["file"]);
fs.Close();
5
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
add a comment |
File.Create returns a FileStream. You need to close that when you have written to the file:
using (FileStream fs = File.Create(path, 1024))
{
Byte info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
// Add some information to the file.
fs.Write(info, 0, info.Length);
}
You can use using for automatically closing the file.
Though the OP is trying to open aStreamWriter
as can be inferred from his use ofFile.AppendText
.
– binki
Nov 29 '16 at 18:55
add a comment |
I updated your question with the code snippet. After proper indenting, it is immediately clear what the problem is: you use File.Create()
but don't close the FileStream
that it returns.
Doing it that way is unnecessary, StreamWriter
already allows appending to an existing file and creating a new file if it doesn't yet exist. Like this:
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
using (StreamWriter sw = new StreamWriter(filePath, true)) {
//write my text
}
Which uses this StreamWriter
constructor.
add a comment |
This question has already been answered, but here is a real world solution that
checks if the directory exists and adds a number to the end if the text file
exists. I use this for creating daily log files on a Windows service I wrote. I
hope this helps someone.
// How to create a log file with a sortable date and add numbering to it if it already exists.
public void CreateLogFile()
{
// filePath usually comes from the App.config file. I've written the value explicitly here for demo purposes.
var filePath = "C:\Logs";
// Append a backslash if one is not present at the end of the file path.
if (!filePath.EndsWith("\"))
{
filePath += "\";
}
// Create the path if it doesn't exist.
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
// Create the file name with a calendar sortable date on the end.
var now = DateTime.Now;
filePath += string.Format("Daily Log [{0}-{1}-{2}].txt", now.Year, now.Month, now.Day);
// Check if the file that is about to be created already exists. If so, append a number to the end.
if (File.Exists(filePath))
{
var counter = 1;
filePath = filePath.Replace(".txt", " (" + counter + ").txt");
while (File.Exists(filePath))
{
filePath = filePath.Replace("(" + counter + ").txt", "(" + (counter + 1) + ").txt");
counter++;
}
}
// Note that after the file is created, the file stream is still open. It needs to be closed
// once it is created if other methods need to access it.
using (var file = File.Create(filePath))
{
file.Close();
}
}
add a comment |
I know this is an old question, but I just want to throw this out there that you can still use File.Create("filename")"
, just add .Dispose()
to it.
File.Create("filename").Dispose();
This way it creates and closes the file for the next process to use it.
File.Create(FilePath).Close();
from the answer above hasthis.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.
– Ghukas
2 days ago
add a comment |
Finally, I think I know the reason for this exception. You might be running this code snippet in multiple threads.
add a comment |
Try this: It works in any case, if the file doesn't exists, it will create it and then write to it. And if already exists, no problem it will open and write to it :
using (FileStream fs= new FileStream(@"File.txt",FileMode.Create,FileAccess.ReadWrite))
{
fs.close();
}
using (StreamWriter sw = new StreamWriter(@"File.txt"))
{
sw.WriteLine("bla bla bla");
sw.Close();
}
1
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f2781357%2ffile-being-used-by-another-process-after-using-file-create%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
10 Answers
10
active
oldest
votes
10 Answers
10
active
oldest
votes
active
oldest
votes
active
oldest
votes
The File.Create
method creates the file and opens a FileStream
on the file. So your file is already open. You don't really need the file.Create method at all:
string filePath = @"c:somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
The boolean in the StreamWriter
constructor will cause the contents to be appended if the file exists.
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
@AnmolRathod go sure that you don't useFile.Create()
method! The snippet above already creates the file!
– Daniel Eisenreich
Aug 15 '18 at 13:25
add a comment |
The File.Create
method creates the file and opens a FileStream
on the file. So your file is already open. You don't really need the file.Create method at all:
string filePath = @"c:somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
The boolean in the StreamWriter
constructor will cause the contents to be appended if the file exists.
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
@AnmolRathod go sure that you don't useFile.Create()
method! The snippet above already creates the file!
– Daniel Eisenreich
Aug 15 '18 at 13:25
add a comment |
The File.Create
method creates the file and opens a FileStream
on the file. So your file is already open. You don't really need the file.Create method at all:
string filePath = @"c:somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
The boolean in the StreamWriter
constructor will cause the contents to be appended if the file exists.
The File.Create
method creates the file and opens a FileStream
on the file. So your file is already open. You don't really need the file.Create method at all:
string filePath = @"c:somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
The boolean in the StreamWriter
constructor will cause the contents to be appended if the file exists.
edited Jun 17 '14 at 7:19
bluish
13.9k1693147
13.9k1693147
answered May 6 '10 at 13:32
Chris DunawayChris Dunaway
8,53512742
8,53512742
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
@AnmolRathod go sure that you don't useFile.Create()
method! The snippet above already creates the file!
– Daniel Eisenreich
Aug 15 '18 at 13:25
add a comment |
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
@AnmolRathod go sure that you don't useFile.Create()
method! The snippet above already creates the file!
– Daniel Eisenreich
Aug 15 '18 at 13:25
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
i tried the above code but i am getting the same error when the file is created and when it tries to write in to the file it shows file is being used by other process.
– Anmol Rathod
Jul 15 '18 at 20:58
@AnmolRathod go sure that you don't use
File.Create()
method! The snippet above already creates the file!– Daniel Eisenreich
Aug 15 '18 at 13:25
@AnmolRathod go sure that you don't use
File.Create()
method! The snippet above already creates the file!– Daniel Eisenreich
Aug 15 '18 at 13:25
add a comment |
File.Create(FilePath).Close();
File.WriteAllText(FileText);
I want to update this answer to say that this is not really the most efficient way to write all text. You should only use this code if you need something quick and dirty.
I was a young programmer when I answered this question, and back then I thought I was some kind of genius for coming up with this answer.
3
this was useful.
– Siva
Oct 1 '11 at 16:03
4
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
13
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
2
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
1
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use theFileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.
– reirab
Apr 13 '16 at 14:23
|
show 7 more comments
File.Create(FilePath).Close();
File.WriteAllText(FileText);
I want to update this answer to say that this is not really the most efficient way to write all text. You should only use this code if you need something quick and dirty.
I was a young programmer when I answered this question, and back then I thought I was some kind of genius for coming up with this answer.
3
this was useful.
– Siva
Oct 1 '11 at 16:03
4
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
13
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
2
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
1
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use theFileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.
– reirab
Apr 13 '16 at 14:23
|
show 7 more comments
File.Create(FilePath).Close();
File.WriteAllText(FileText);
I want to update this answer to say that this is not really the most efficient way to write all text. You should only use this code if you need something quick and dirty.
I was a young programmer when I answered this question, and back then I thought I was some kind of genius for coming up with this answer.
File.Create(FilePath).Close();
File.WriteAllText(FileText);
I want to update this answer to say that this is not really the most efficient way to write all text. You should only use this code if you need something quick and dirty.
I was a young programmer when I answered this question, and back then I thought I was some kind of genius for coming up with this answer.
edited Nov 24 '18 at 3:45
answered Jul 27 '11 at 19:14
Carsen Daniel YatesCarsen Daniel Yates
1,4951915
1,4951915
3
this was useful.
– Siva
Oct 1 '11 at 16:03
4
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
13
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
2
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
1
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use theFileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.
– reirab
Apr 13 '16 at 14:23
|
show 7 more comments
3
this was useful.
– Siva
Oct 1 '11 at 16:03
4
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
13
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
2
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
1
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use theFileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.
– reirab
Apr 13 '16 at 14:23
3
3
this was useful.
– Siva
Oct 1 '11 at 16:03
this was useful.
– Siva
Oct 1 '11 at 16:03
4
4
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
I love how all the other answers were just way too complicated. People don't realize that there is a simpler answer to every problem.
– Carsen Daniel Yates
Nov 23 '11 at 1:08
13
13
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
The downside to this code is that it unnecessarily opens the file twice. Also, it isn't really necessary to check whether the file exists at all, as the FileStream constructor will automatically create it for you if it does not exist, unless you explicitly tell it not to do that.
– reirab
Aug 9 '13 at 14:02
2
2
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
@reirab This is completely relative. I need to check if the file exists and if it does, delete it and create it again, so this answer is preferred in my case.
– makoshichi
Apr 13 '16 at 13:54
1
1
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use the
FileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.– reirab
Apr 13 '16 at 14:23
@S.O. Then you have a different problem than the OP, just a related one. Also, in your case, you can still just use the
FileStream(string, FileMode)
constructor and pass it FileMode.Create, which will overwrite any existing file. Still no need to open the file twice. Also, this answer was edited after I posted my original comment.– reirab
Apr 13 '16 at 14:23
|
show 7 more comments
When creating a text file you can use the following code:
System.IO.File.WriteAllText("c:test.txt", "all of your content here");
Using the code from your comment. The file(stream) you created must be closed. File.Create return the filestream to the just created file.:
string filePath = "filepath here";
if (!System.IO.File.Exists(filePath))
{
System.IO.FileStream f = System.IO.File.Create(filePath);
f.Close();
}
using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath))
{
//write my text
}
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
File.Create
returnsFileStream
and that hasClose()
– Null Head
Sep 7 '15 at 20:49
add a comment |
When creating a text file you can use the following code:
System.IO.File.WriteAllText("c:test.txt", "all of your content here");
Using the code from your comment. The file(stream) you created must be closed. File.Create return the filestream to the just created file.:
string filePath = "filepath here";
if (!System.IO.File.Exists(filePath))
{
System.IO.FileStream f = System.IO.File.Create(filePath);
f.Close();
}
using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath))
{
//write my text
}
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
File.Create
returnsFileStream
and that hasClose()
– Null Head
Sep 7 '15 at 20:49
add a comment |
When creating a text file you can use the following code:
System.IO.File.WriteAllText("c:test.txt", "all of your content here");
Using the code from your comment. The file(stream) you created must be closed. File.Create return the filestream to the just created file.:
string filePath = "filepath here";
if (!System.IO.File.Exists(filePath))
{
System.IO.FileStream f = System.IO.File.Create(filePath);
f.Close();
}
using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath))
{
//write my text
}
When creating a text file you can use the following code:
System.IO.File.WriteAllText("c:test.txt", "all of your content here");
Using the code from your comment. The file(stream) you created must be closed. File.Create return the filestream to the just created file.:
string filePath = "filepath here";
if (!System.IO.File.Exists(filePath))
{
System.IO.FileStream f = System.IO.File.Create(filePath);
f.Close();
}
using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath))
{
//write my text
}
edited Apr 25 '13 at 6:00
answered May 6 '10 at 13:20
Ralf de KleineRalf de Kleine
8,97623073
8,97623073
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
File.Create
returnsFileStream
and that hasClose()
– Null Head
Sep 7 '15 at 20:49
add a comment |
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
File.Create
returnsFileStream
and that hasClose()
– Null Head
Sep 7 '15 at 20:49
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
I don't seem to have a close option. Here's the code: string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); if (!File.Exists(filePath)) { File.Create(filePath); } using (StreamWriter sw = File.AppendText(filePath)) { //write my text }
– Brett
May 6 '10 at 13:23
File.Create
returns FileStream
and that has Close()
– Null Head
Sep 7 '15 at 20:49
File.Create
returns FileStream
and that has Close()
– Null Head
Sep 7 '15 at 20:49
add a comment |
FileStream fs= File.Create(ConfigurationManager.AppSettings["file"]);
fs.Close();
5
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
add a comment |
FileStream fs= File.Create(ConfigurationManager.AppSettings["file"]);
fs.Close();
5
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
add a comment |
FileStream fs= File.Create(ConfigurationManager.AppSettings["file"]);
fs.Close();
FileStream fs= File.Create(ConfigurationManager.AppSettings["file"]);
fs.Close();
edited Mar 17 '14 at 19:24
Paresh Mayani
96.4k62222279
96.4k62222279
answered Mar 17 '14 at 19:22
user3430377user3430377
16912
16912
5
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
add a comment |
5
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
5
5
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
Welcome to Stackoverflow. You should at least write short description to describe your answer/solution.
– Paresh Mayani
Mar 17 '14 at 19:24
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
This was only thing that worked!! <3
– Chris Emerson
Sep 22 '16 at 12:19
add a comment |
File.Create returns a FileStream. You need to close that when you have written to the file:
using (FileStream fs = File.Create(path, 1024))
{
Byte info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
// Add some information to the file.
fs.Write(info, 0, info.Length);
}
You can use using for automatically closing the file.
Though the OP is trying to open aStreamWriter
as can be inferred from his use ofFile.AppendText
.
– binki
Nov 29 '16 at 18:55
add a comment |
File.Create returns a FileStream. You need to close that when you have written to the file:
using (FileStream fs = File.Create(path, 1024))
{
Byte info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
// Add some information to the file.
fs.Write(info, 0, info.Length);
}
You can use using for automatically closing the file.
Though the OP is trying to open aStreamWriter
as can be inferred from his use ofFile.AppendText
.
– binki
Nov 29 '16 at 18:55
add a comment |
File.Create returns a FileStream. You need to close that when you have written to the file:
using (FileStream fs = File.Create(path, 1024))
{
Byte info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
// Add some information to the file.
fs.Write(info, 0, info.Length);
}
You can use using for automatically closing the file.
File.Create returns a FileStream. You need to close that when you have written to the file:
using (FileStream fs = File.Create(path, 1024))
{
Byte info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
// Add some information to the file.
fs.Write(info, 0, info.Length);
}
You can use using for automatically closing the file.
answered May 6 '10 at 13:32
kimtiedekimtiede
1828
1828
Though the OP is trying to open aStreamWriter
as can be inferred from his use ofFile.AppendText
.
– binki
Nov 29 '16 at 18:55
add a comment |
Though the OP is trying to open aStreamWriter
as can be inferred from his use ofFile.AppendText
.
– binki
Nov 29 '16 at 18:55
Though the OP is trying to open a
StreamWriter
as can be inferred from his use of File.AppendText
.– binki
Nov 29 '16 at 18:55
Though the OP is trying to open a
StreamWriter
as can be inferred from his use of File.AppendText
.– binki
Nov 29 '16 at 18:55
add a comment |
I updated your question with the code snippet. After proper indenting, it is immediately clear what the problem is: you use File.Create()
but don't close the FileStream
that it returns.
Doing it that way is unnecessary, StreamWriter
already allows appending to an existing file and creating a new file if it doesn't yet exist. Like this:
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
using (StreamWriter sw = new StreamWriter(filePath, true)) {
//write my text
}
Which uses this StreamWriter
constructor.
add a comment |
I updated your question with the code snippet. After proper indenting, it is immediately clear what the problem is: you use File.Create()
but don't close the FileStream
that it returns.
Doing it that way is unnecessary, StreamWriter
already allows appending to an existing file and creating a new file if it doesn't yet exist. Like this:
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
using (StreamWriter sw = new StreamWriter(filePath, true)) {
//write my text
}
Which uses this StreamWriter
constructor.
add a comment |
I updated your question with the code snippet. After proper indenting, it is immediately clear what the problem is: you use File.Create()
but don't close the FileStream
that it returns.
Doing it that way is unnecessary, StreamWriter
already allows appending to an existing file and creating a new file if it doesn't yet exist. Like this:
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
using (StreamWriter sw = new StreamWriter(filePath, true)) {
//write my text
}
Which uses this StreamWriter
constructor.
I updated your question with the code snippet. After proper indenting, it is immediately clear what the problem is: you use File.Create()
but don't close the FileStream
that it returns.
Doing it that way is unnecessary, StreamWriter
already allows appending to an existing file and creating a new file if it doesn't yet exist. Like this:
string filePath = string.Format(@"{0}M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
using (StreamWriter sw = new StreamWriter(filePath, true)) {
//write my text
}
Which uses this StreamWriter
constructor.
edited Oct 28 '15 at 9:35
Hossein Narimani Rad
20.5k116296
20.5k116296
answered May 6 '10 at 15:13
Hans PassantHans Passant
787k10612982072
787k10612982072
add a comment |
add a comment |
This question has already been answered, but here is a real world solution that
checks if the directory exists and adds a number to the end if the text file
exists. I use this for creating daily log files on a Windows service I wrote. I
hope this helps someone.
// How to create a log file with a sortable date and add numbering to it if it already exists.
public void CreateLogFile()
{
// filePath usually comes from the App.config file. I've written the value explicitly here for demo purposes.
var filePath = "C:\Logs";
// Append a backslash if one is not present at the end of the file path.
if (!filePath.EndsWith("\"))
{
filePath += "\";
}
// Create the path if it doesn't exist.
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
// Create the file name with a calendar sortable date on the end.
var now = DateTime.Now;
filePath += string.Format("Daily Log [{0}-{1}-{2}].txt", now.Year, now.Month, now.Day);
// Check if the file that is about to be created already exists. If so, append a number to the end.
if (File.Exists(filePath))
{
var counter = 1;
filePath = filePath.Replace(".txt", " (" + counter + ").txt");
while (File.Exists(filePath))
{
filePath = filePath.Replace("(" + counter + ").txt", "(" + (counter + 1) + ").txt");
counter++;
}
}
// Note that after the file is created, the file stream is still open. It needs to be closed
// once it is created if other methods need to access it.
using (var file = File.Create(filePath))
{
file.Close();
}
}
add a comment |
This question has already been answered, but here is a real world solution that
checks if the directory exists and adds a number to the end if the text file
exists. I use this for creating daily log files on a Windows service I wrote. I
hope this helps someone.
// How to create a log file with a sortable date and add numbering to it if it already exists.
public void CreateLogFile()
{
// filePath usually comes from the App.config file. I've written the value explicitly here for demo purposes.
var filePath = "C:\Logs";
// Append a backslash if one is not present at the end of the file path.
if (!filePath.EndsWith("\"))
{
filePath += "\";
}
// Create the path if it doesn't exist.
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
// Create the file name with a calendar sortable date on the end.
var now = DateTime.Now;
filePath += string.Format("Daily Log [{0}-{1}-{2}].txt", now.Year, now.Month, now.Day);
// Check if the file that is about to be created already exists. If so, append a number to the end.
if (File.Exists(filePath))
{
var counter = 1;
filePath = filePath.Replace(".txt", " (" + counter + ").txt");
while (File.Exists(filePath))
{
filePath = filePath.Replace("(" + counter + ").txt", "(" + (counter + 1) + ").txt");
counter++;
}
}
// Note that after the file is created, the file stream is still open. It needs to be closed
// once it is created if other methods need to access it.
using (var file = File.Create(filePath))
{
file.Close();
}
}
add a comment |
This question has already been answered, but here is a real world solution that
checks if the directory exists and adds a number to the end if the text file
exists. I use this for creating daily log files on a Windows service I wrote. I
hope this helps someone.
// How to create a log file with a sortable date and add numbering to it if it already exists.
public void CreateLogFile()
{
// filePath usually comes from the App.config file. I've written the value explicitly here for demo purposes.
var filePath = "C:\Logs";
// Append a backslash if one is not present at the end of the file path.
if (!filePath.EndsWith("\"))
{
filePath += "\";
}
// Create the path if it doesn't exist.
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
// Create the file name with a calendar sortable date on the end.
var now = DateTime.Now;
filePath += string.Format("Daily Log [{0}-{1}-{2}].txt", now.Year, now.Month, now.Day);
// Check if the file that is about to be created already exists. If so, append a number to the end.
if (File.Exists(filePath))
{
var counter = 1;
filePath = filePath.Replace(".txt", " (" + counter + ").txt");
while (File.Exists(filePath))
{
filePath = filePath.Replace("(" + counter + ").txt", "(" + (counter + 1) + ").txt");
counter++;
}
}
// Note that after the file is created, the file stream is still open. It needs to be closed
// once it is created if other methods need to access it.
using (var file = File.Create(filePath))
{
file.Close();
}
}
This question has already been answered, but here is a real world solution that
checks if the directory exists and adds a number to the end if the text file
exists. I use this for creating daily log files on a Windows service I wrote. I
hope this helps someone.
// How to create a log file with a sortable date and add numbering to it if it already exists.
public void CreateLogFile()
{
// filePath usually comes from the App.config file. I've written the value explicitly here for demo purposes.
var filePath = "C:\Logs";
// Append a backslash if one is not present at the end of the file path.
if (!filePath.EndsWith("\"))
{
filePath += "\";
}
// Create the path if it doesn't exist.
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
// Create the file name with a calendar sortable date on the end.
var now = DateTime.Now;
filePath += string.Format("Daily Log [{0}-{1}-{2}].txt", now.Year, now.Month, now.Day);
// Check if the file that is about to be created already exists. If so, append a number to the end.
if (File.Exists(filePath))
{
var counter = 1;
filePath = filePath.Replace(".txt", " (" + counter + ").txt");
while (File.Exists(filePath))
{
filePath = filePath.Replace("(" + counter + ").txt", "(" + (counter + 1) + ").txt");
counter++;
}
}
// Note that after the file is created, the file stream is still open. It needs to be closed
// once it is created if other methods need to access it.
using (var file = File.Create(filePath))
{
file.Close();
}
}
answered Oct 12 '11 at 22:49
HalcyonHalcyon
7,488145481
7,488145481
add a comment |
add a comment |
I know this is an old question, but I just want to throw this out there that you can still use File.Create("filename")"
, just add .Dispose()
to it.
File.Create("filename").Dispose();
This way it creates and closes the file for the next process to use it.
File.Create(FilePath).Close();
from the answer above hasthis.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.
– Ghukas
2 days ago
add a comment |
I know this is an old question, but I just want to throw this out there that you can still use File.Create("filename")"
, just add .Dispose()
to it.
File.Create("filename").Dispose();
This way it creates and closes the file for the next process to use it.
File.Create(FilePath).Close();
from the answer above hasthis.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.
– Ghukas
2 days ago
add a comment |
I know this is an old question, but I just want to throw this out there that you can still use File.Create("filename")"
, just add .Dispose()
to it.
File.Create("filename").Dispose();
This way it creates and closes the file for the next process to use it.
I know this is an old question, but I just want to throw this out there that you can still use File.Create("filename")"
, just add .Dispose()
to it.
File.Create("filename").Dispose();
This way it creates and closes the file for the next process to use it.
answered Jan 5 '18 at 16:13
IamBatmanIamBatman
6861018
6861018
File.Create(FilePath).Close();
from the answer above hasthis.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.
– Ghukas
2 days ago
add a comment |
File.Create(FilePath).Close();
from the answer above hasthis.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.
– Ghukas
2 days ago
File.Create(FilePath).Close();
from the answer above has this.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.– Ghukas
2 days ago
File.Create(FilePath).Close();
from the answer above has this.Dispose(true); GC.SuppressFinalize((object) this);
in its implementation.– Ghukas
2 days ago
add a comment |
Finally, I think I know the reason for this exception. You might be running this code snippet in multiple threads.
add a comment |
Finally, I think I know the reason for this exception. You might be running this code snippet in multiple threads.
add a comment |
Finally, I think I know the reason for this exception. You might be running this code snippet in multiple threads.
Finally, I think I know the reason for this exception. You might be running this code snippet in multiple threads.
answered Aug 2 '18 at 18:59
Kusala SubasingheKusala Subasinghe
1
1
add a comment |
add a comment |
Try this: It works in any case, if the file doesn't exists, it will create it and then write to it. And if already exists, no problem it will open and write to it :
using (FileStream fs= new FileStream(@"File.txt",FileMode.Create,FileAccess.ReadWrite))
{
fs.close();
}
using (StreamWriter sw = new StreamWriter(@"File.txt"))
{
sw.WriteLine("bla bla bla");
sw.Close();
}
1
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
add a comment |
Try this: It works in any case, if the file doesn't exists, it will create it and then write to it. And if already exists, no problem it will open and write to it :
using (FileStream fs= new FileStream(@"File.txt",FileMode.Create,FileAccess.ReadWrite))
{
fs.close();
}
using (StreamWriter sw = new StreamWriter(@"File.txt"))
{
sw.WriteLine("bla bla bla");
sw.Close();
}
1
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
add a comment |
Try this: It works in any case, if the file doesn't exists, it will create it and then write to it. And if already exists, no problem it will open and write to it :
using (FileStream fs= new FileStream(@"File.txt",FileMode.Create,FileAccess.ReadWrite))
{
fs.close();
}
using (StreamWriter sw = new StreamWriter(@"File.txt"))
{
sw.WriteLine("bla bla bla");
sw.Close();
}
Try this: It works in any case, if the file doesn't exists, it will create it and then write to it. And if already exists, no problem it will open and write to it :
using (FileStream fs= new FileStream(@"File.txt",FileMode.Create,FileAccess.ReadWrite))
{
fs.close();
}
using (StreamWriter sw = new StreamWriter(@"File.txt"))
{
sw.WriteLine("bla bla bla");
sw.Close();
}
edited Feb 12 '13 at 10:39
answered Feb 12 '13 at 10:28
PureSilencePureSilence
20723
20723
1
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
add a comment |
1
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
1
1
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
using will close file by call Dispose. In your sample file was closed twice
– Valentine Zakharenko
Sep 20 '16 at 4:24
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f2781357%2ffile-being-used-by-another-process-after-using-file-create%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown