public ListAttributeKeys ( string path ) : List |
||
path | string | Path which should be read. |
Résultat | List |
/// <summary> /// Replaces the contents of a specified destinationFile with the file described by the current IFileInfo /// object, deleting the original file, and creating a backup of the replaced file. /// Also specifies whether to ignore merge errors. /// </summary> /// <param name="destinationFile">Destination file.</param> /// <param name="destinationBackupFileName">Destination backup file name.</param> /// <param name="ignoreMetadataErrors"><c>true</c> to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise <c>false</c>.</param> /// <returns>A IFileInfo object that encapsulates information about the file described by the destFileName parameter.</returns> public IFileInfo Replace(IFileInfo destinationFile, IFileInfo destinationBackupFileName, bool ignoreMetadataErrors) { #if __MonoCS__ var reader = new ExtendedAttributeReaderUnix(); var oldSourceEAs = new Dictionary <string, string>(); var oldTargetEAs = new Dictionary <string, string>(); if (reader.IsFeatureAvailable(this.FullName)) { foreach (var key in reader.ListAttributeKeys(this.FullName)) { oldSourceEAs.Add(key, this.GetExtendedAttribute(key)); } foreach (var key in reader.ListAttributeKeys(destinationFile.FullName)) { oldTargetEAs.Add(key, destinationFile.GetExtendedAttribute(key)); } } #endif var result = new FileInfoWrapper(this.original.Replace(destinationFile.FullName, destinationBackupFileName.FullName, ignoreMetadataErrors)); #if __MonoCS__ foreach (var entry in oldSourceEAs) { result.SetExtendedAttribute(entry.Key, entry.Value, true); } foreach (var entry in oldTargetEAs) { destinationBackupFileName.SetExtendedAttribute(entry.Key, entry.Value, true); } #endif return(result); }
/// <summary> /// Replaces the contents of a specified destinationFile with the file described by the current IFileInfo /// object, deleting the original file, and creating a backup of the replaced file. /// Also specifies whether to ignore merge errors. /// </summary> /// <param name="destinationFile">Destination file.</param> /// <param name="destinationBackupFileName">Destination backup file name.</param> /// <param name="ignoreMetadataErrors"><c>true</c> to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise <c>false</c>.</param> /// <returns>A IFileInfo object that encapsulates information about the file described by the destFileName parameter.</returns> public IFileInfo Replace(IFileInfo destinationFile, IFileInfo destinationBackupFileName, bool ignoreMetadataErrors) { #if __MonoCS__ var reader = new ExtendedAttributeReaderUnix(); var oldSourceEAs = new Dictionary<string, string>(); var oldTargetEAs = new Dictionary<string, string>(); if (reader.IsFeatureAvailable(this.FullName)) { foreach (var key in reader.ListAttributeKeys(this.FullName)) { oldSourceEAs.Add(key, this.GetExtendedAttribute(key)); } foreach (var key in reader.ListAttributeKeys(destinationFile.FullName)) { oldTargetEAs.Add(key, destinationFile.GetExtendedAttribute(key)); } } #else try { #endif var result = new FileInfoWrapper(this.original.Replace(destinationFile.FullName, destinationBackupFileName.FullName, ignoreMetadataErrors)); #if __MonoCS__ foreach (var entry in oldSourceEAs) { result.SetExtendedAttribute(entry.Key, entry.Value, true); } foreach (var entry in oldTargetEAs) { destinationBackupFileName.SetExtendedAttribute(entry.Key, entry.Value, true); } return result; #else return result; } catch (IOException ex) { int error = Marshal.GetHRForException(ex) & 0xffff; if (error == 1176) { string newName = destinationFile.FullName + Guid.NewGuid().ToString() + ".sync"; IFileInfo newResult = null; try { var copy = this.original.CopyTo(newName, true); newResult = new FileInfoWrapper(copy.Replace(destinationFile.FullName, destinationBackupFileName.FullName, ignoreMetadataErrors)); this.Delete(); return newResult; } catch (Exception) { } finally { if (File.Exists(newName)) { File.Delete(newName); } } throw; } else { throw; } } #endif }
public void ListAttributesOfFolder() { Directory.CreateDirectory(path); string key = "test"; string value = "value"; var reader = new ExtendedAttributeReaderUnix(); Assert.That(reader.ListAttributeKeys(path).Count == 0); reader.SetExtendedAttribute(path, key, value); Assert.That(reader.ListAttributeKeys(path).Count == 1); Assert.Contains("test", reader.ListAttributeKeys(path)); }
/// <summary> /// Replaces the contents of a specified destinationFile with the file described by the current IFileInfo /// object, deleting the original file, and creating a backup of the replaced file. /// Also specifies whether to ignore merge errors. /// </summary> /// <param name="destinationFile">Destination file.</param> /// <param name="destinationBackupFileName">Destination backup file name.</param> /// <param name="ignoreMetadataErrors"><c>true</c> to ignore merge errors (such as attributes and ACLs) from the replaced file to the replacement file; otherwise <c>false</c>.</param> /// <returns>A IFileInfo object that encapsulates information about the file described by the destFileName parameter.</returns> public IFileInfo Replace(IFileInfo destinationFile, IFileInfo destinationBackupFileName, bool ignoreMetadataErrors) { #if __MonoCS__ var reader = new ExtendedAttributeReaderUnix(); var oldSourceEAs = new Dictionary <string, string>(); var oldTargetEAs = new Dictionary <string, string>(); if (reader.IsFeatureAvailable(this.FullName)) { foreach (var key in reader.ListAttributeKeys(this.FullName)) { oldSourceEAs.Add(key, this.GetExtendedAttribute(key)); } foreach (var key in reader.ListAttributeKeys(destinationFile.FullName)) { oldTargetEAs.Add(key, destinationFile.GetExtendedAttribute(key)); } } #else try { #endif var result = new FileInfoWrapper(this.original.Replace(destinationFile.FullName, destinationBackupFileName.FullName, ignoreMetadataErrors)); #if __MonoCS__ foreach (var entry in oldSourceEAs) { result.SetExtendedAttribute(entry.Key, entry.Value, true); } foreach (var entry in oldTargetEAs) { destinationBackupFileName.SetExtendedAttribute(entry.Key, entry.Value, true); } return(result); #else return(result); } catch (IOException ex) { int error = Marshal.GetHRForException(ex) & 0xffff; if (error == 1176) { string newName = destinationFile.FullName + Guid.NewGuid().ToString() + ".sync"; IFileInfo newResult = null; try { var copy = this.original.CopyTo(newName, true); newResult = new FileInfoWrapper(copy.Replace(destinationFile.FullName, destinationBackupFileName.FullName, ignoreMetadataErrors)); this.Delete(); return(newResult); } catch (Exception) { } finally { if (File.Exists(newName)) { File.Delete(newName); } } throw; } else { throw; } } #endif }