diff --git a/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs
new file mode 100644
index 0000000000..47a86fea1f
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs
@@ -0,0 +1,450 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.AccessControl;
+
+namespace Org.Apache.REEF.IO.Files
+{
+ ///
+ /// This is meant only as a proxy class for and has no
+ /// relation to classes in .
+ /// To create a object from a object,
+ /// please use the static factory method .
+ ///
+ public sealed class DefaultDirectoryInfo : IDirectoryInfo
+ {
+ private readonly DirectoryInfo _directoryInfo;
+
+ private DefaultDirectoryInfo(DirectoryInfo info)
+ {
+ _directoryInfo = info;
+ }
+
+ ///
+ /// Factory method to create an object
+ /// from a object.
+ ///
+ public static IDirectoryInfo FromDirectoryInfo(DirectoryInfo info)
+ {
+ return new DefaultDirectoryInfo(info);
+ }
+
+ ///
+ /// See .
+ ///
+ public FileAttributes Attributes
+ {
+ get { return _directoryInfo.Attributes; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime CreationTime
+ {
+ get { return _directoryInfo.CreationTime; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime CreationTimeUtc
+ {
+ get { return _directoryInfo.CreationTimeUtc; }
+ }
+
+ ///
+ /// See .
+ ///
+ public bool Exists
+ {
+ get { return _directoryInfo.Exists; }
+ }
+
+ ///
+ /// See .
+ ///
+ public string Extension
+ {
+ get { return _directoryInfo.Extension; }
+ }
+
+ ///
+ /// See .
+ ///
+ public string FullName
+ {
+ get { return _directoryInfo.FullName; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastAccessTime
+ {
+ get { return _directoryInfo.LastAccessTime; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastAccessTimeUtc
+ {
+ get { return _directoryInfo.LastAccessTimeUtc; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastWriteTime
+ {
+ get { return _directoryInfo.LastWriteTime; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastWriteTimeUtc
+ {
+ get { return _directoryInfo.LastWriteTimeUtc; }
+ }
+
+ ///
+ /// See .
+ ///
+ public string Name
+ {
+ get { return _directoryInfo.Name; }
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo Parent
+ {
+ get { return FromDirectoryInfo(_directoryInfo.Parent); }
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo Root
+ {
+ get { return FromDirectoryInfo(_directoryInfo.Root); }
+ }
+
+ ///
+ /// See .
+ ///
+ public void Delete()
+ {
+ _directoryInfo.Delete();
+ }
+
+ ///
+ /// See .
+ ///
+ public void Refresh()
+ {
+ _directoryInfo.Refresh();
+ }
+
+ ///
+ /// See .
+ ///
+ public void Create()
+ {
+ _directoryInfo.Create();
+ }
+
+ ///
+ /// See .
+ ///
+ public void Create(DirectorySecurity directorySecurity)
+ {
+ _directoryInfo.Create(directorySecurity);
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo CreateSubdirectory(string path)
+ {
+ return FromDirectoryInfo(_directoryInfo.CreateSubdirectory(path));
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo CreateSubdirectory(string path, DirectorySecurity directorySecurity)
+ {
+ return FromDirectoryInfo(_directoryInfo.CreateSubdirectory(path, directorySecurity));
+ }
+
+ ///
+ /// See .
+ ///
+ public void Delete(bool recursive)
+ {
+ _directoryInfo.Delete(recursive);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateDirectories()
+ {
+ return _directoryInfo.EnumerateDirectories().Select(FromDirectoryInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateDirectories(string searchPattern)
+ {
+ return _directoryInfo.EnumerateDirectories(searchPattern).Select(FromDirectoryInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateDirectories(string searchPattern, SearchOption searchOption)
+ {
+ return _directoryInfo.EnumerateDirectories(searchPattern, searchOption).Select(FromDirectoryInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateFiles()
+ {
+ return _directoryInfo.EnumerateFiles().Select(DefaultFileInfo.FromFileInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateFiles(string searchPattern)
+ {
+ return _directoryInfo.EnumerateFiles(searchPattern).Select(DefaultFileInfo.FromFileInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateFiles(string searchPattern, SearchOption searchOption)
+ {
+ return _directoryInfo.EnumerateFiles(searchPattern, searchOption).Select(DefaultFileInfo.FromFileInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateFileSystemInfos()
+ {
+ return ConvertFileSystemInfoEnumerable(_directoryInfo.EnumerateFileSystemInfos());
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateFileSystemInfos(string searchPattern)
+ {
+ return ConvertFileSystemInfoEnumerable(_directoryInfo.EnumerateFileSystemInfos(searchPattern));
+ }
+
+ ///
+ /// See .
+ ///
+ public IEnumerable EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption)
+ {
+ return ConvertFileSystemInfoEnumerable(_directoryInfo.EnumerateFileSystemInfos(searchPattern, searchOption));
+ }
+
+ ///
+ /// See .
+ ///
+ public DirectorySecurity GetAccessControl()
+ {
+ return _directoryInfo.GetAccessControl();
+ }
+
+ ///
+ /// See .
+ ///
+ public DirectorySecurity GetAccessControl(AccessControlSections includeSections)
+ {
+ return _directoryInfo.GetAccessControl(includeSections);
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo[] GetDirectories()
+ {
+ return ConvertDirectoryArray(_directoryInfo.GetDirectories());
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo[] GetDirectories(string searchPattern)
+ {
+ return ConvertDirectoryArray(_directoryInfo.GetDirectories(searchPattern));
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption)
+ {
+ return ConvertDirectoryArray(_directoryInfo.GetDirectories(searchPattern, searchOption));
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo[] GetFiles()
+ {
+ return ConvertFileArray(_directoryInfo.GetFiles());
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo[] GetFiles(string searchPattern)
+ {
+ return ConvertFileArray(_directoryInfo.GetFiles(searchPattern));
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption)
+ {
+ return ConvertFileArray(_directoryInfo.GetFiles(searchPattern, searchOption));
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileSystemInfo[] GetFileSystemInfos()
+ {
+ return ConvertFileSystemInfoArray(_directoryInfo.GetFileSystemInfos());
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileSystemInfo[] GetFileSystemInfos(string searchPattern)
+ {
+ return ConvertFileSystemInfoArray(_directoryInfo.GetFileSystemInfos(searchPattern));
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption)
+ {
+ return ConvertFileSystemInfoArray(_directoryInfo.GetFileSystemInfos(searchPattern, searchOption));
+ }
+
+ ///
+ /// See .
+ ///
+ public void MoveTo(string destDirName)
+ {
+ _directoryInfo.MoveTo(destDirName);
+ }
+
+ ///
+ /// See .
+ ///
+ public void SetAccessControl(DirectorySecurity directorySecurity)
+ {
+ _directoryInfo.SetAccessControl(directorySecurity);
+ }
+
+ ///
+ /// See .
+ ///
+ public override bool Equals(object obj)
+ {
+ var other = obj as DefaultDirectoryInfo;
+ return other != null && Equals(other);
+ }
+
+ ///
+ /// See .
+ ///
+ public override int GetHashCode()
+ {
+ return _directoryInfo != null ? _directoryInfo.GetHashCode() : 0;
+ }
+
+ ///
+ /// See .
+ ///
+ public override string ToString()
+ {
+ return _directoryInfo.ToString();
+ }
+
+ private static IFileSystemInfo[] ConvertFileSystemInfoArray(IEnumerable fsInfos)
+ {
+ return ConvertFileSystemInfoEnumerable(fsInfos).ToArray();
+ }
+
+ private static IEnumerable ConvertFileSystemInfoEnumerable(IEnumerable fileSystemInfos)
+ {
+ return fileSystemInfos.Select(FileSystemInfoFactory.FromFileSystemInfo).Where(fsInfo => fsInfo != null);
+ }
+
+ private static IDirectoryInfo[] ConvertDirectoryArray(DirectoryInfo[] directoryInfos)
+ {
+ var arr = new IDirectoryInfo[directoryInfos.Length];
+
+ for (var i = 0; i < directoryInfos.Length; i++)
+ {
+ arr[i] = FromDirectoryInfo(directoryInfos[i]);
+ }
+
+ return arr;
+ }
+
+ private static IFileInfo[] ConvertFileArray(FileInfo[] fileInfos)
+ {
+ var arr = new IFileInfo[fileInfos.Length];
+
+ for (var i = 0; i < fileInfos.Length; i++)
+ {
+ arr[i] = DefaultFileInfo.FromFileInfo(fileInfos[i]);
+ }
+
+ return arr;
+ }
+
+ private bool Equals(DefaultDirectoryInfo other)
+ {
+ return Equals(_directoryInfo, other._directoryInfo);
+ }
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs
new file mode 100644
index 0000000000..be4bfee5ac
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs
@@ -0,0 +1,334 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.IO;
+using System.Security.AccessControl;
+
+namespace Org.Apache.REEF.IO.Files
+{
+ ///
+ /// This is meant only as a proxy class for and has no
+ /// relation to classes in .
+ /// To create a object from a object,
+ /// please use the static method .
+ ///
+ public sealed class DefaultFileInfo : IFileInfo
+ {
+ private readonly FileInfo _fileInfo;
+
+ private DefaultFileInfo(FileInfo info)
+ {
+ _fileInfo = info;
+ }
+
+ ///
+ /// Factory method to create an object
+ /// from a object.
+ ///
+ public static IFileInfo FromFileInfo(FileInfo fileInfo)
+ {
+ return new DefaultFileInfo(fileInfo);
+ }
+
+ ///
+ /// See .
+ ///
+ public FileAttributes Attributes
+ {
+ get { return _fileInfo.Attributes; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime CreationTime
+ {
+ get { return _fileInfo.CreationTime; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime CreationTimeUtc
+ {
+ get { return _fileInfo.CreationTimeUtc; }
+ }
+
+ ///
+ /// See .
+ ///
+ public IDirectoryInfo Directory
+ {
+ get { return DefaultDirectoryInfo.FromDirectoryInfo(_fileInfo.Directory); }
+ }
+
+ ///
+ /// See .
+ ///
+ public string DirectoryName
+ {
+ get { return _fileInfo.DirectoryName; }
+ }
+
+ ///
+ /// See .
+ ///
+ public bool Exists
+ {
+ get { return _fileInfo.Exists; }
+ }
+
+ ///
+ /// See .
+ ///
+ public string Extension
+ {
+ get { return _fileInfo.Extension; }
+ }
+
+ ///
+ /// See .
+ ///
+ public string FullName
+ {
+ get { return _fileInfo.FullName; }
+ }
+
+ ///
+ /// See .
+ ///
+ public bool IsReadOnly
+ {
+ get { return _fileInfo.IsReadOnly; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastAccessTime
+ {
+ get { return _fileInfo.LastAccessTime; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastAccessTimeUtc
+ {
+ get { return _fileInfo.LastAccessTimeUtc; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastWriteTime
+ {
+ get { return _fileInfo.LastWriteTime; }
+ }
+
+ ///
+ /// See .
+ ///
+ public DateTime LastWriteTimeUtc
+ {
+ get { return _fileInfo.LastWriteTimeUtc; }
+ }
+
+ ///
+ /// See .
+ ///
+ public long Length
+ {
+ get { return _fileInfo.Length; }
+ }
+
+ ///
+ /// See .
+ ///
+ public string Name
+ {
+ get { return _fileInfo.Name; }
+ }
+
+ ///
+ /// See .
+ ///
+ public StreamWriter AppendText()
+ {
+ return _fileInfo.AppendText();
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo CopyTo(string destFileName)
+ {
+ return FromFileInfo(_fileInfo.CopyTo(destFileName));
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo CopyTo(string destFileName, bool overwrite)
+ {
+ return FromFileInfo(_fileInfo.CopyTo(destFileName, overwrite));
+ }
+
+ ///
+ /// See .
+ ///
+ public FileStream Create()
+ {
+ return _fileInfo.Create();
+ }
+
+ ///
+ /// See .
+ ///
+ public StreamWriter CreateText()
+ {
+ return _fileInfo.CreateText();
+ }
+
+ ///
+ /// See .
+ ///
+ public void Delete()
+ {
+ _fileInfo.Delete();
+ }
+
+ ///
+ /// See .
+ ///
+ public void MoveTo(string destFileName)
+ {
+ _fileInfo.MoveTo(destFileName);
+ }
+
+ ///
+ /// See .
+ ///
+ public FileStream Open(FileMode mode)
+ {
+ return _fileInfo.Open(mode);
+ }
+
+ ///
+ /// See .
+ ///
+ public FileStream Open(FileMode mode, FileAccess access)
+ {
+ return _fileInfo.Open(mode, access);
+ }
+
+ ///
+ /// See .
+ ///
+ public FileStream Open(FileMode mode, FileAccess access, FileShare share)
+ {
+ return _fileInfo.Open(mode, access, share);
+ }
+
+ ///
+ /// See .
+ ///
+ public FileStream OpenRead()
+ {
+ return _fileInfo.OpenRead();
+ }
+
+ ///
+ /// See .
+ ///
+ public StreamReader OpenText()
+ {
+ return _fileInfo.OpenText();
+ }
+
+ ///
+ /// See .
+ ///
+ public FileStream OpenWrite()
+ {
+ return _fileInfo.OpenWrite();
+ }
+
+ ///
+ /// See .
+ ///
+ public void Refresh()
+ {
+ _fileInfo.Refresh();
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo Replace(string destinationFileName, string destinationBackupFileName)
+ {
+ return FromFileInfo(_fileInfo.Replace(destinationFileName, destinationBackupFileName));
+ }
+
+ ///
+ /// See .
+ ///
+ public IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors)
+ {
+ return FromFileInfo(_fileInfo.Replace(destinationFileName, destinationBackupFileName, ignoreMetadataErrors));
+ }
+
+ ///
+ /// See .
+ ///
+ public void SetAccessControl(FileSecurity fileSecurity)
+ {
+ _fileInfo.SetAccessControl(fileSecurity);
+ }
+
+ ///
+ /// See .
+ ///
+ public override bool Equals(object obj)
+ {
+ var other = obj as DefaultFileInfo;
+ return other != null && Equals(other);
+ }
+
+ ///
+ /// See .
+ ///
+ public override int GetHashCode()
+ {
+ return _fileInfo != null ? _fileInfo.GetHashCode() : 0;
+ }
+
+ ///
+ /// See .
+ ///
+ public override string ToString()
+ {
+ return _fileInfo.ToString();
+ }
+
+ private bool Equals(DefaultFileInfo other)
+ {
+ return Equals(_fileInfo, other._fileInfo);
+ }
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs b/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs
new file mode 100644
index 0000000000..81a628d70f
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs
@@ -0,0 +1,45 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System.IO;
+
+namespace Org.Apache.REEF.IO.Files
+{
+ ///
+ /// A static factory class that creates an object from
+ /// a object.
+ ///
+ public static class FileSystemInfoFactory
+ {
+ public static IFileSystemInfo FromFileSystemInfo(FileSystemInfo fsInfo)
+ {
+ var dirInfo = fsInfo as DirectoryInfo;
+ if (dirInfo != null)
+ {
+ return DefaultDirectoryInfo.FromDirectoryInfo(dirInfo);
+ }
+
+ var fileInfo = fsInfo as FileInfo;
+ if (fileInfo != null)
+ {
+ return DefaultFileInfo.FromFileInfo(fileInfo);
+ }
+
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs
new file mode 100644
index 0000000000..9d8af33bcb
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs
@@ -0,0 +1,177 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System.Collections.Generic;
+using System.IO;
+using System.Security.AccessControl;
+
+namespace Org.Apache.REEF.IO.Files
+{
+ ///
+ /// This is meant only as a proxy interface for and has no
+ /// relation to classes in .
+ /// To create an object from a object,
+ /// please use the static method .
+ ///
+ public interface IDirectoryInfo : IFileSystemInfo
+ {
+ ///
+ /// See .
+ ///
+ IDirectoryInfo Parent { get; }
+
+ ///
+ /// See .
+ ///
+ IDirectoryInfo Root { get; }
+
+ ///
+ /// See .
+ ///
+ void Create();
+
+ ///
+ /// See .
+ ///
+ void Create(DirectorySecurity directorySecurity);
+
+ ///
+ /// See .
+ ///
+ IDirectoryInfo CreateSubdirectory(string path);
+
+ ///
+ /// See .
+ ///
+ IDirectoryInfo CreateSubdirectory(string path, DirectorySecurity directorySecurity);
+
+ ///
+ /// See .
+ ///
+ void Delete(bool recursive);
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateDirectories();
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateDirectories(string searchPattern);
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateDirectories(string searchPattern, SearchOption searchOption);
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateFiles();
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateFiles(string searchPattern);
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateFiles(string searchPattern, SearchOption searchOption);
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateFileSystemInfos();
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateFileSystemInfos(string searchPattern);
+
+ ///
+ /// See .
+ ///
+ IEnumerable EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption);
+
+ ///
+ /// See .
+ ///
+ DirectorySecurity GetAccessControl();
+
+ ///
+ /// See .
+ ///
+ DirectorySecurity GetAccessControl(AccessControlSections includeSections);
+
+ ///
+ /// See .
+ ///
+ IDirectoryInfo[] GetDirectories();
+
+ ///
+ /// See .
+ ///
+ IDirectoryInfo[] GetDirectories(string searchPattern);
+
+ ///
+ /// See .
+ ///
+ IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption);
+
+ ///
+ /// See .
+ ///
+ IFileInfo[] GetFiles();
+
+ ///
+ /// See .
+ ///
+ IFileInfo[] GetFiles(string searchPattern);
+
+ ///
+ /// See .
+ ///
+ IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption);
+
+ ///
+ /// See .
+ ///
+ IFileSystemInfo[] GetFileSystemInfos();
+
+ ///
+ /// See .
+ ///
+ IFileSystemInfo[] GetFileSystemInfos(string searchPattern);
+
+ ///
+ /// See .
+ ///
+ IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption);
+
+ ///
+ /// See .
+ ///
+ void MoveTo(string destDirName);
+
+ ///
+ /// See .
+ ///
+ void SetAccessControl(DirectorySecurity directorySecurity);
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs
new file mode 100644
index 0000000000..ea258dcb34
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs
@@ -0,0 +1,96 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.IO;
+
+namespace Org.Apache.REEF.IO.Files
+{
+ ///
+ /// This is meant only as a proxy interface for and has no
+ /// relation to classes in .
+ /// To create an object from a
+ /// object, please use the static factory method .
+ ///
+ public interface IFileSystemInfo
+ {
+ ///
+ /// See .
+ ///
+ FileAttributes Attributes { get; }
+
+ ///
+ /// See .
+ ///
+ DateTime CreationTime { get; }
+
+ ///
+ /// See .
+ ///
+ DateTime CreationTimeUtc { get; }
+
+ ///
+ /// See .
+ ///
+ bool Exists { get; }
+
+ ///
+ /// See .
+ ///
+ string Extension { get; }
+
+ ///
+ /// See .
+ ///
+ string FullName { get; }
+
+ ///
+ /// See .
+ ///
+ DateTime LastAccessTime { get; }
+
+ ///
+ /// See .
+ ///
+ DateTime LastAccessTimeUtc { get; }
+
+ ///
+ /// See .
+ ///
+ DateTime LastWriteTime { get; }
+
+ ///
+ /// See .
+ ///
+ DateTime LastWriteTimeUtc { get; }
+
+ ///
+ /// See .
+ ///
+ string Name { get; }
+
+ ///
+ /// See .
+ ///
+ void Delete();
+
+ ///
+ /// See .
+ ///
+ void Refresh();
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs
new file mode 100644
index 0000000000..bcb43c0a96
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs
@@ -0,0 +1,126 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System.IO;
+using System.Security.AccessControl;
+
+namespace Org.Apache.REEF.IO.Files
+{
+ ///
+ /// This is meant only as a proxy interface for and has no
+ /// relation to classes in .
+ /// To create an object from a object,
+ /// please use the static factory method .
+ ///
+ public interface IFileInfo : IFileSystemInfo
+ {
+ ///
+ /// See .
+ ///
+ IDirectoryInfo Directory { get; }
+
+ ///
+ /// See .
+ ///
+ string DirectoryName { get; }
+
+ ///
+ /// See .
+ ///
+ bool IsReadOnly { get; }
+
+ ///
+ /// See .
+ ///
+ long Length { get; }
+
+ ///
+ /// See .
+ ///
+ StreamWriter AppendText();
+
+ ///
+ /// See .
+ ///
+ IFileInfo CopyTo(string destFileName);
+
+ ///
+ /// See .
+ ///
+ IFileInfo CopyTo(string destFileName, bool overwrite);
+
+ ///
+ /// See .
+ ///
+ FileStream Create();
+
+ ///
+ /// See .
+ ///
+ StreamWriter CreateText();
+
+ ///
+ /// See .
+ ///
+ void MoveTo(string destFileName);
+
+ ///
+ /// See .
+ ///
+ FileStream Open(FileMode mode);
+
+ ///
+ /// See .
+ ///
+ FileStream Open(FileMode mode, FileAccess access);
+
+ ///
+ /// See .
+ ///
+ FileStream Open(FileMode mode, FileAccess access, FileShare share);
+
+ ///
+ /// See .
+ ///
+ FileStream OpenRead();
+
+ ///
+ /// See .
+ ///
+ StreamReader OpenText();
+
+ ///
+ /// See .
+ ///
+ FileStream OpenWrite();
+
+ ///
+ /// See .
+ ///
+ IFileInfo Replace(string destinationFileName, string destinationBackupFileName);
+
+ ///
+ /// See .
+ ///
+ IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);
+
+ ///
+ /// See .
+ ///
+ void SetAccessControl(FileSecurity fileSecurity);
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj b/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
index 2fda1205e0..eedc6a907f 100644
--- a/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
+++ b/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
@@ -98,6 +98,12 @@ under the License.
+
+
+
+
+
+