一部のファイルを処理する前に、git から lfs 追跡タグを削除しようとしています。当社のジェンキン サーバーで使用されているファイルの一部には、260 文字以上のファイル パスが含まれています。このため、C# を長いファイル パスで動作させようとしています。以下のコードに苦労しているようですが、「ファイルが見つかりませんでした」というメッセージが表示されますが、ファイルが 100% 存在せず、@"\?\" の使用に関して何か間違ったことをしていると思います。アドバイスをいただければ幸いです。 .
static int removeLFSTracking(string path)
{
int rC = STATUS_OK;
string lfsTracked = ".lfs.tracked";
List<string> files = new List<string>();
getFiles( path, files );
foreach(string file in files)
{
if(file.Contains(lfsTracked))
{
string newFileName = file.Replace(lfsTracked, "");
try
{
System.IO.File.Move( @"\\?\" + file, @"\\?\" + newFileName );
}
catch(SystemException e)
{
Console.WriteLine( "Failed to remove lfs tracked from file " + file );
Console.WriteLine( e.ToString( ) );
}
}
}
return rC;
}
私のXML app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="Extensions" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</configSections>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
答えは次のとおりです。相対パスを使用していましたが、これは構文では機能しないようで、絶対パスに変更するとコードは正常に機能しました。