internal void _SetTimes(string fileOrDirectory, bool isFile)
{
#if SILVERLIGHT
// punt on setting file times
#else
// workitem 8807:
// Because setting the time is not considered to be a fatal error,
// and because other applications can interfere with the setting
// of a time on a directory, we're going to swallow IO exceptions
// in this method.
try
{
if (_ntfsTimesAreSet)
{
#if NETCF
// workitem 7944: set time should not be a fatal error on CF
int rc = NetCfFile.SetTimes(fileOrDirectory, _Ctime, _Atime, _Mtime);
if ( rc != 0)
{
WriteStatus("Warning: SetTimes failed. entry({0}) file({1}) rc({2})",
FileName, fileOrDirectory, rc);
}
#else
if (isFile)
{
// It's possible that the extract was cancelled, in which case,
// the file does not exist.
if (File.Exists(fileOrDirectory))
{
File.SetCreationTimeUtc(fileOrDirectory, _Ctime);
File.SetLastAccessTimeUtc(fileOrDirectory, _Atime);
File.SetLastWriteTimeUtc(fileOrDirectory, _Mtime);
}
}
else
{
// It's possible that the extract was cancelled, in which case,
// the directory does not exist.
if (Directory.Exists(fileOrDirectory))
{
Directory.SetCreationTimeUtc(fileOrDirectory, _Ctime);
Directory.SetLastAccessTimeUtc(fileOrDirectory, _Atime);
Directory.SetLastWriteTimeUtc(fileOrDirectory, _Mtime);
}
}
#endif
}
else
{
// workitem 6191
DateTime AdjustedLastModified = Crisis.Ionic.Zip.SharedUtilities.AdjustTime_Reverse(LastModified);
#if NETCF
int rc = NetCfFile.SetLastWriteTime(fileOrDirectory, AdjustedLastModified);
if ( rc != 0)
{
WriteStatus("Warning: SetLastWriteTime failed. entry({0}) file({1}) rc({2})",
FileName, fileOrDirectory, rc);
}
#else
if (isFile)
File.SetLastWriteTime(fileOrDirectory, AdjustedLastModified);
else
Directory.SetLastWriteTime(fileOrDirectory, AdjustedLastModified);
#endif
}
}
catch (System.IO.IOException ioexc1)
{
WriteStatus("failed to set time on {0}: {1}", fileOrDirectory, ioexc1.Message);
}
#endif
}