Reputation: 572
I am trying to renaming every file's empty space with an underscore:
DirectoryInfo dir = new DirectoryInfo(@"Q:\Audio");
var files = (from f in dir.GetFiles() select f.FullName);
files.ToList().ConvertAll( s => s.Replace( " ", "_") );
But it's not working, I tried to use a foreach loop and it complains "Cannot assign to 'element' because it is a 'foreach iteration variable'"
How do I approach this?
Upvotes: 2
Views: 1055
Reputation: 8055
You can use one of code blocks below:
DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName.Replace(" ", "_"));
or:
DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = (from fn in files select fn.Replace(" ", "_"));
or:
DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = files.Select(s => s.Replace(" ", "_"));
or (Bad Idea):
DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = files.ToList().ConvertAll(s => s.Replace(" ", "_"));
EDIT 1: but i suggest to use select function, its better to not call .ToList() method for deferred objects like IQueryable.
Upvotes: 2
Reputation: 22148
you actually need to reset your variable files
. Change you last line to reset the files
variable with the output from ConvertAll
.
files = files.ToList().ConvertAll( s => s.Replace( " ", "_") );
Upvotes: 0
Reputation: 25521
ConvertAll
returns a new List
.
var renamedFiles = files.ToList().ConvertAll(s => s.Replace(" ", "_"));
Upvotes: 4