2

すべてのファイルの空のスペースの名前をアンダースコアで変更しようとしています。

DirectoryInfo dir = new DirectoryInfo(@"Q:\Audio");
var files = (from f in dir.GetFiles() select f.FullName);
files.ToList().ConvertAll( s => s.Replace( " ", "_") );

しかし、それは機能していません。foreachループを使用しようとしましたが、「「foreach反復変数」であるため「要素」に割り当てることができません」と文句を言います。

どうすればこれにアプローチできますか?

4

3 に答える 3

4

ConvertAll新しいを返しますList

var renamedFiles = files.ToList().ConvertAll(s => s.Replace(" ", "_"));
于 2012-10-12T20:20:00.917 に答える
2

以下のコードブロックのいずれかを使用できます。

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName.Replace(" ", "_"));

また:

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = (from fn in files select fn.Replace(" ", "_"));

また:

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = files.Select(s => s.Replace(" ", "_"));

または(悪い考え):

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = files.ToList().ConvertAll(s => s.Replace(" ", "_"));

編集1:しかし、私はselect関数を使用することをお勧めします。IQueryableのような遅延オブジェクトに対しては、.ToList()メソッドを呼び出さない方がよいでしょう。

于 2012-10-12T20:26:04.317 に答える
0

実際には変数をリセットする必要がありますfiles。最後の行を変更filesして、からの出力で変数をリセットしますConvertAll

files = files.ToList().ConvertAll( s => s.Replace( " ", "_") );
于 2012-10-12T20:20:10.057 に答える